+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "tools/rbd/IndentStream.h"
-
-namespace rbd {
-
-int IndentBuffer::overflow (int c) {
- if (traits_type::eq_int_type(traits_type::eof(), c)) {
- return traits_type::not_eof(c);
- }
-
- int r;
- switch (c) {
- case '\n':
- m_buffer += c;
- flush_line();
- r = m_streambuf->sputn(m_buffer.c_str(), m_buffer.size());
- m_buffer.clear();
- return r;
- case '\t':
- // convert tab to single space and fall-through
- c = ' ';
- default:
- if (m_indent + m_buffer.size() >= m_line_length) {
- size_t word_offset = m_buffer.find_last_of(m_delim);
- bool space_delim = (m_delim == " ");
- if (word_offset == std::string::npos && !space_delim) {
- word_offset = m_buffer.find_last_of(" ");
- }
-
- if (word_offset != std::string::npos) {
- flush_line();
- m_streambuf->sputn(m_buffer.c_str(), word_offset);
- m_buffer = std::string(m_buffer,
- word_offset + (space_delim ? 1 : 0));
- } else {
- flush_line();
- m_streambuf->sputn(m_buffer.c_str(), m_buffer.size());
- m_buffer.clear();
- }
- m_streambuf->sputc('\n');
- }
- m_buffer += c;
- return c;
- }
-}
-
-void IndentBuffer::flush_line() {
- if (m_initial_offset >= m_indent) {
- m_initial_offset = 0;
- m_streambuf->sputc('\n');
- }
-
- m_streambuf->sputn(m_indent_prefix.c_str(), m_indent - m_initial_offset);
- m_initial_offset = 0;
-}
-
-} // namespace rbd