8 #ifndef INCL_evo_impl_rawbuffer_h 9 #define INCL_evo_impl_rawbuffer_h 17 #pragma warning(disable:4458) 41 RawBuffer() : data(NULL), size(0), used(0), owned(false)
45 RawBuffer(ulong size) : data(NULL), size(0), used(0), owned(false)
58 assert( used <= size );
66 ulong
avail(ulong checksize)
const {
68 const ulong size_avail = size -
used;
69 return (checksize > size_avail ? size_avail : checksize);
97 assert( data != NULL );
127 }
else if (size != newsize) {
129 assert( newsize > 0 );
134 char*
const old_data =
data;
135 data = (
char*)::malloc((
size_t)newsize);
136 memcpy(data, old_data, (
size_t)used);
143 data = (
char*)::malloc((
size_t)newsize);
180 ulong
insert(ulong index, ulong size=1) {
181 ulong tempsize = used +
size;
182 if (tempsize > this->size)
186 memmove(data+index+size, data+index, used-index);
203 if (index < used && size > 0) {
205 size_t tempsize = used - index;
206 if (size >= tempsize)
214 memmove(data+index, data+index+size, tempsize);
230 assert( used <= size );
231 if (offset >= used) {
234 }
else if (offset > 0) {
236 memmove(data, data+offset, used);
249 ulong
read(ulong& offset,
char* buf, ulong readsize) {
251 ulong maxsize = used - offset;
252 if (readsize > maxsize)
254 memcpy(buf, data+offset, readsize);
269 ulong
write(
const char* buf, ulong writesize) {
271 ulong maxsize = size -
used;
272 if (writesize > maxsize)
274 memcpy(data+used, buf, writesize);
289 ulong
write(
char ch, ulong count=1) {
291 const ulong maxsize = size -
used;
294 memset(data+used, ch, count);
310 #if defined(_MSC_VER) RawBuffer & ref(char *data, ulong size, ulong used=0)
Reference another buffer.
Definition: rawbuffer.h:96
RawBuffer & minsize(ulong min)
Resize buffer if smaller than minimum size.
Definition: rawbuffer.h:157
ulong insert(ulong index, ulong size=1)
Make room to insert items.
Definition: rawbuffer.h:180
RawBuffer & clear()
Clear buffer.
Definition: rawbuffer.h:168
RawBuffer(ulong size)
Constructor.
Definition: rawbuffer.h:45
Evo implementation detail for system portability – this is included by most Evo headers, include this via: include <evo/type.h>.
ulong size
Buffer size (capacity) in bytes – do not modify, use: resize(), minsize(), reset(), ref()
Definition: rawbuffer.h:36
ulong write(char ch, ulong count=1)
Write character at end of buffer.
Definition: rawbuffer.h:289
void flush(ulong &offset)
Flush data already read from buffer using offset.
Definition: rawbuffer.h:229
RawBuffer & reset()
Reset to empty state without a buffer.
Definition: rawbuffer.h:77
~RawBuffer()
Destructor.
Definition: rawbuffer.h:49
RawBuffer & resize(ulong newsize)
Resize buffer.
Definition: rawbuffer.h:116
ulong read(ulong &offset, char *buf, ulong readsize)
Read from buffer using offset.
Definition: rawbuffer.h:249
Evo C++ Library namespace.
Definition: alg.h:11
char * data
Buffer data pointer, NULL if empty (size=0)
Definition: rawbuffer.h:35
ulong avail() const
Get size available.
Definition: rawbuffer.h:57
bool owned
Whether this owns the buffer and must free it.
Definition: rawbuffer.h:38
ulong avail(ulong checksize) const
Get size up to size available.
Definition: rawbuffer.h:66
RawBuffer()
Constructor.
Definition: rawbuffer.h:41
T & min(T &a, T &b)
Returns lowest of given values.
Definition: alg.h:26
Simple raw memory buffer.
Definition: rawbuffer.h:34
ulong write(const char *buf, ulong writesize)
Write at end of buffer.
Definition: rawbuffer.h:269
ulong used
Buffer size in use in bytes.
Definition: rawbuffer.h:37