yaml-cpp

FORK: A YAML parser and emitter in C++
git clone https://git.neptards.moe/neptards/yaml-cpp.git
Log | Files | Refs | README | LICENSE

ostream_wrapper.cpp (1320B)


      1 #include "yaml-cpp/ostream_wrapper.h"
      2 
      3 #include <algorithm>
      4 #include <cstring>
      5 #include <iostream>
      6 
      7 namespace YAML {
      8 ostream_wrapper::ostream_wrapper()
      9     : m_buffer(1, '\0'),
     10       m_pStream(nullptr),
     11       m_pos(0),
     12       m_row(0),
     13       m_col(0),
     14       m_comment(false) {}
     15 
     16 ostream_wrapper::ostream_wrapper(std::ostream& stream)
     17     : m_buffer{},
     18       m_pStream(&stream),
     19       m_pos(0),
     20       m_row(0),
     21       m_col(0),
     22       m_comment(false) {}
     23 
     24 ostream_wrapper::~ostream_wrapper() = default;
     25 
     26 void ostream_wrapper::write(const std::string& str) {
     27   if (m_pStream) {
     28     m_pStream->write(str.c_str(), str.size());
     29   } else {
     30     m_buffer.resize(std::max(m_buffer.size(), m_pos + str.size() + 1));
     31     std::copy(str.begin(), str.end(), m_buffer.begin() + m_pos);
     32   }
     33 
     34   for (char ch : str) {
     35     update_pos(ch);
     36   }
     37 }
     38 
     39 void ostream_wrapper::write(const char* str, std::size_t size) {
     40   if (m_pStream) {
     41     m_pStream->write(str, size);
     42   } else {
     43     m_buffer.resize(std::max(m_buffer.size(), m_pos + size + 1));
     44     std::copy(str, str + size, m_buffer.begin() + m_pos);
     45   }
     46 
     47   for (std::size_t i = 0; i < size; i++) {
     48     update_pos(str[i]);
     49   }
     50 }
     51 
     52 void ostream_wrapper::update_pos(char ch) {
     53   m_pos++;
     54   m_col++;
     55 
     56   if (ch == '\n') {
     57     m_row++;
     58     m_col = 0;
     59     m_comment = false;
     60   }
     61 }
     62 }  // namespace YAML