35 #include <sys/types.h>
43 using std::ostringstream;
48 #include "PPTStreamBuf.h"
50 const char* eod_marker =
"0000000d";
51 const size_t eod_marker_len = 8;
53 PPTStreamBuf::PPTStreamBuf(
int fd,
unsigned bufsize) :
54 d_bufsize(bufsize), d_buffer(0), count(0)
59 PPTStreamBuf::~PPTStreamBuf()
67 void PPTStreamBuf::open(
int fd,
unsigned bufsize)
70 d_bufsize = bufsize == 0 ? 1 : bufsize;
72 d_buffer =
new char[d_bufsize];
73 setp(d_buffer, d_buffer + d_bufsize);
77 int PPTStreamBuf::sync()
79 if (pptr() > pbase()) {
81 strm << hex << setw(7) << setfill(
'0') << (
unsigned int) (pptr() - pbase()) <<
"d";
82 write(d_fd, strm.str().c_str(), strm.str().length());
84 count += write(d_fd, d_buffer, pptr() - pbase());
85 setp(d_buffer, d_buffer + d_bufsize);
91 int PPTStreamBuf::overflow(
int c)
95 *pptr() =
static_cast<char>(c);
101 void PPTStreamBuf::finish()
105 write(d_fd, eod_marker, eod_marker_len);