/*******************************************************} { } { File: buffer.h } { Created by Tsviatko Jongov } { http://tsviatko.jongov.com } { Date : 25.01.2007 } { } { CBuffer class. } { } {*******************************************************/ #pragma once #include #include typedef int BOOL; class CBuffer { private: char * fBuf = NULL; // buffer for bytes int fSize; // size of buffer int fLast; // points after Last valid byte public: CBuffer(int Size) { fLast = 0; fSize = 0; fFirst = 0; if (Size > 0) { fBuf = (char *)malloc(Size); fSize = Size; } } ~CBuffer() { if (fBuf != NULL) { free(fBuf); fBuf = NULL; } } void add(char * Data, int Size) { if (fLast + Size > fSize) { char * tmp = (char *)malloc(fSize + Size); memcpy(tmp, fBuf, fLast); fSize += Size; free(fBuf); fBuf = tmp; } memcpy(fBuf + fLast, Data, Size); fLast += Size; } void compact() { if (fFirst > 0) { int aLen = fLast - fFirst; memmove(fBuf, fBuf + fFirst, aLen); fFirst = 0; fLast = aLen; } } void reset() { fFirst = 0; fLast = 0; } int len() { return (fLast - fFirst); } void * head() { return fBuf + fFirst; } int fFirst; };