43using std::ostringstream;
48#include "PPTStreamBuf.h"
50const char* eod_marker =
"0000000d";
51const size_t eod_marker_len = 8;
53PPTStreamBuf::PPTStreamBuf(
int fd,
unsigned bufsize) : d_bufsize(bufsize), d_fd(fd)
58PPTStreamBuf::~PPTStreamBuf()
66void PPTStreamBuf::open(
int fd,
unsigned bufsize)
69 d_bufsize = bufsize == 0 ? 1 : bufsize;
71 d_buffer =
new char[d_bufsize];
72 setp(d_buffer, d_buffer + d_bufsize);
76int PPTStreamBuf::sync()
78 if (pptr() > pbase()) {
80 strm << hex << setw(7) << setfill(
'0') << (
unsigned int) (pptr() - pbase()) <<
"d";
81 write(d_fd, strm.str().c_str(), strm.str().size());
83 count += write(d_fd, d_buffer, pptr() - pbase());
84 setp(d_buffer, d_buffer + d_bufsize);
90int PPTStreamBuf::overflow(
int c)
94 *pptr() =
static_cast<char>(c);
100void PPTStreamBuf::finish()
104 write(d_fd, eod_marker, eod_marker_len);