34 explicit Filter(std::unique_ptr<Filter> =
nullptr);
39 virtual void begin() = 0;
40 virtual void end() = 0;
42 virtual std::string encode(
const std::string&) = 0;
43 virtual std::string decode(
const std::string&) = 0;
54 std::unique_ptr<Filter> m_next;
65 : m_streamBuffer(buffer), m_filter(filter)
67 setp(m_outBuffer, m_outBuffer + (m_outBufferSize - 1));
68 setg(m_inBuffer + m_inPutback, m_inBuffer + m_inPutback,
69 m_inBuffer + m_inPutback);
75 static const int m_outBufferSize = 10;
76 char m_outBuffer[m_outBufferSize];
78 static const int m_inBufferSize = 10;
79 static const int m_inPutback = 4;
80 char m_inBuffer[m_inBufferSize];
84 int num = pptr() - pbase();
85 std::string encoded = m_filter.encode(std::string(pbase(), pptr()));
86 m_streamBuffer.sputn(encoded.c_str(), (long) encoded.size());
91 int_type overflow(int_type c)
override;
92 int_type underflow()
override;
97 std::streambuf& m_streamBuffer;