From 7c85e9d5de8cf9cedc260b3d1a6715a5f7d3bd35 Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Fri, 25 May 2012 17:39:14 -0500 Subject: [PATCH] Updated ostream wrapper with a write() and update_pos --- include/yaml-cpp/ostream_wrapper.h | 20 ++++++++++----- src/ostream_wrapper.cpp | 41 ++++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/include/yaml-cpp/ostream_wrapper.h b/include/yaml-cpp/ostream_wrapper.h index 8d33a3b..fb40f18 100644 --- a/include/yaml-cpp/ostream_wrapper.h +++ b/include/yaml-cpp/ostream_wrapper.h @@ -16,22 +16,28 @@ namespace YAML ostream_wrapper(); ~ostream_wrapper(); - void reserve(unsigned size); + void reserve(std::size_t size); + void write(const std::string& str); + void write(const char *str, std::size_t size); void put(char ch); + void set_comment() { m_comment = true; } const char *str() const { return m_buffer; } - unsigned row() const { return m_row; } - unsigned col() const { return m_col; } - unsigned pos() const { return m_pos; } + std::size_t row() const { return m_row; } + std::size_t col() const { return m_col; } + std::size_t pos() const { return m_pos; } bool comment() const { return m_comment; } + + private: + void update_pos(char ch); private: char *m_buffer; - unsigned m_pos; - unsigned m_size; + std::size_t m_pos; + std::size_t m_size; - unsigned m_row, m_col; + std::size_t m_row, m_col; bool m_comment; }; diff --git a/src/ostream_wrapper.cpp b/src/ostream_wrapper.cpp index 34cbb3e..58432ae 100644 --- a/src/ostream_wrapper.cpp +++ b/src/ostream_wrapper.cpp @@ -13,7 +13,7 @@ namespace YAML delete [] m_buffer; } - void ostream_wrapper::reserve(unsigned size) + void ostream_wrapper::reserve(std::size_t size) { if(size <= m_size) return; @@ -25,6 +25,28 @@ namespace YAML m_buffer = newBuffer; m_size = size; } + + void ostream_wrapper::write(const std::string& str) + { + while(m_pos + str.size() + 1 >= m_size) + reserve(m_size * 2); + + std::copy(str.begin(), str.end(), m_buffer + m_pos); + + for(std::size_t i=0;i= m_size) + reserve(m_size * 2); + + std::copy(str, str + size, m_buffer + m_pos); + + for(std::size_t i=0;i