14 #ifndef _echoinputstreambuf_h 15 #define _echoinputstreambuf_h 30 class EchoInputStreambuf :
public std::streambuf {
32 EchoInputStreambuf(std::streambuf* source) : m_source(source), m_buffer(
'\0') {
36 EchoInputStreambuf(
const string& input) : m_buffer(
'\0') {
37 std::istringstream* istream =
new std::istringstream(input);
38 m_source = istream->rdbuf();
41 virtual ~EchoInputStreambuf() {
45 virtual int overflow(
int) {
54 virtual int underflow() {
56 if (gptr() < egptr()) {
59 result = m_source->sbumpc();
62 setg(&m_buffer, &m_buffer, &m_buffer + 1);
65 std::cout.put(result);
74 if (gptr() < egptr()) {
75 result = m_source->sputbackc(*gptr());
76 setg(
nullptr,
nullptr,
nullptr);
78 if (m_source->pubsync() == EOF) {
84 virtual std::streambuf* setbuf(
char* p, std::streamsize len) {
85 return m_source->pubsetbuf(p, len);
89 std::streambuf* m_source;
95 #endif // _echoinputstreambuf_h Definition: console.h:293