ostream_wrapper.cpp 1.2 KB

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