33 #ifndef _MOOT_BUFFERIO_H 34 #define _MOOT_BUFFERIO_H 83 cb_rdata(reinterpret_cast<const char*>(data)),
91 cb_rdata(cb.cb_rdata),
92 cb_offset(cb.cb_offset),
100 inline void clear(
void)
115 cb_rdata =
reinterpret_cast<const char *
>(
data);
127 virtual bool valid(
void) {
return true; };
142 if (n==0 || cb_offset >= cb_used)
return 0;
143 else if (n < cb_used - cb_offset) {
145 memcpy(buf, cb_rdata+cb_offset, n);
151 memcpy(buf, cb_rdata+cb_offset, cb_used-cb_offset);
160 if (cb_offset >= cb_used)
return EOF;
161 return cb_rdata[cb_offset++];
172 inline const char*
data(
void)
const {
return cb_rdata; };
175 inline size_t size(
void)
const {
return cb_used; };
190 inline std::string
as_string(
bool normalize_ws=
false,
191 bool trim_left=
false,
192 bool trim_right=
false)
196 str.reserve(cb_used-cb_offset);
197 to_string(str, normalize_ws, trim_left, trim_right);
210 bool normalize_ws =
false,
211 bool trim_left =
false,
212 bool trim_right =
false)
221 trim_left, trim_right);
246 static const size_t CB_DEFAULT_SIZE = 32;
249 static const size_t CB_DEFAULT_GET = 32;
268 cb_get(CB_DEFAULT_GET),
285 size_t get=CB_DEFAULT_GET)
286 :
micbuffer(reinterpret_cast<const char *>(data),used),
287 cb_wdata(reinterpret_cast<char*>(data)),
292 if (!alloc) cb_alloc =
cb_used;
310 inline void assign(
const void *data,
size_t len) {
312 memcpy(cb_wdata, data, len);
323 inline void clear(
void)
333 if (cb_created && cb_wdata) free(cb_wdata);
346 virtual bool flush(
void) {
347 if (!
cb_offset || !cb_wdata)
return true;
355 virtual bool write(
const char *buf,
size_t n) {
356 if (!reserve(n+
cb_used, cb_get))
return false;
357 memcpy(cb_wdata+
cb_used, buf, n);
363 virtual bool putbyte(
unsigned char c) {
364 if (!reserve(1+
cb_used, cb_get))
return false;
370 virtual bool puts(
const char *s) {
371 return write(s,strlen(s));
374 virtual bool puts(
const std::string &s) {
375 return write(s.data(),s.size());
379 virtual bool vprintf(
const char *fmt, va_list &ap)
382 moot_va_copy(ap_tmp,ap);
383 size_t nchars = vsnprintf(cb_wdata+
cb_used, cb_alloc-
cb_used, fmt, ap);
385 if (!reserve(1+nchars+
cb_used, cb_get))
return false;
386 moot_va_copy(ap,ap_tmp);
400 inline bool reserve(
size_t size,
size_t pad=0) {
401 if (size > cb_alloc) {
402 size_t newalloc = size+pad;
405 if (cb_wdata) cb_wdata =
reinterpret_cast<char *
>(realloc(cb_wdata, newalloc));
406 else cb_wdata =
reinterpret_cast<char *
>(malloc(newalloc));
409 char *newdata =
reinterpret_cast<char *
>(malloc(newalloc));
410 memcpy(newdata, cb_wdata,
cb_used);
414 assert(cb_wdata != NULL);
437 #endif //_MOOT_BUFFERIO_H size_t size(void) const
Definition: mootBufferIO.h:177
virtual bool eof(void)
Definition: mootBufferIO.h:130
useful utilities, especially for command-line programs
const char * data(void) const
Definition: mootBufferIO.h:174
virtual ByteCount read(char *buf, size_t n)
Definition: mootBufferIO.h:141
mcbuffer mbuffer
alias for i/o buffers
Definition: mootBufferIO.h:464
size_t cb_offset
current read offset position in buffer
Definition: mootBufferIO.h:64
void release(void)
Definition: mootBufferIO.h:105
void clear(void)
Definition: mootBufferIO.h:98
virtual bool valid(void)
Definition: mootBufferIO.h:127
std::string as_string(bool normalize_ws=false, bool trim_left=false, bool trim_right=false) const
Definition: mootBufferIO.h:192
Abstract base class for output stream wrappers.
Definition: mootIO.h:194
size_t capacity(void) const
Definition: mootBufferIO.h:180
mcbuffer miobuffer
alias for i/o buffers
Definition: mootBufferIO.h:463
size_t offset(void) const
Definition: mootBufferIO.h:183
size_t cb_used
used length of buffer (in bytes)
Definition: mootBufferIO.h:65
mcbuffer mobuffer
alias for (input+)output buffers
Definition: mootBufferIO.h:460
Namespace for I/O stream wrappers.
Definition: mootBufferIO.h:45
utilities for functions taking variable number of arguments
Streambuf-like class for I/O on C char* buffers.
Definition: mootBufferIO.h:242
mcbuffer mocbuffer
alias for (input+)output buffers
Definition: mootBufferIO.h:461
micbuffer mibuffer
alias for input-only buffers
Definition: mootBufferIO.h:459
virtual int getbyte(void)
Definition: mootBufferIO.h:159
virtual ~micbuffer(void)
Definition: mootBufferIO.h:95
micbuffer(const void *data, size_t len)
Definition: mootBufferIO.h:79
int ByteCount
typedef for byte counts (should be signed, for compatibility)
Definition: mootIO.h:52
const char * cb_rdata
underlying character data buffer
Definition: mootBufferIO.h:63
void to_string(std::string &str, bool normalize_ws=false, bool trim_left=false, bool trim_right=false) const
Definition: mootBufferIO.h:211
Streambuf-like class for input from C char* buffers.
Definition: mootBufferIO.h:60
mcbuffer miocbuffer
alias for i/o buffers
Definition: mootBufferIO.h:462
void moot_normalize_ws(const char *buf, size_t len, std::string &out, bool trim_left=true, bool trim_right=true)
Abstract base class for input stream wrappers.
Definition: mootIO.h:129
void assign(const void *data, size_t len)
Definition: mootBufferIO.h:114