/* * BufferCore.h * * Created on: 18 May 2016 * Author: wentzelc */ #ifndef REDACORE_BUFFERCORE_H_ #define REDACORE_BUFFERCORE_H_ // redA Libraries /* none */ // Standard C/C++ Libraries /* none */ //--------------------------------------------------------------------------- /** Shift and Rolling buffer class * * Shifting buffer: * Data is either set at start of buffer or appended to buffer * Start of buffered data is always at beginning of buffer * Never rolls over (option to over overwrite if data longer than buffer) * Shifts unsused data to left when clearing used data * Always zero terminates buffer * Can look directly at buffer * * Rolling buffer: * Data is continuosly assigned to buffer * Start of buffer is tracked by references (can be anywhere) * Data rolls over to start of buffer if end of buffer reached (option to overwrite start) * Data is never shifted/moved inside buffer, only references are adjusted * Never zero terminates buffer * Can only look at data by copying (stitching) to another buffer */ class CRollingBuffer { private: // Buffer Definition char * Buffer; // Memory allocated to buffer const int BufSize; // Size of allocated buffer int BufLen; // Total unread characters in buffer // Temporary output buffer char * OutBuffer; // Temporary output buffer for "stitched" (rollover) data // Buffer pointers int BufStart; // First unread characters in buffer int BufEnd; // Next write position for new data (End of unread data + 1) public: // Life Cycle CRollingBuffer( int BufferSize ); ~CRollingBuffer(); // Direct Operations int Reset(); // Clear buffer and reset all pointers to start of buffer // Reading from buffer char PeekChar( int Pos = 0 ); // Return one character from buffer (do not remove from buffer int PeekDirect( char ** Data, int PeekPos = 0 ); // Return contiguous data pointer direct to buffer (continguous data couont returned) int Peek( char ** Data, int PeekPos = 0, int MaxLen = -1 ); // Return stiched data copied to temporary output buffer int PeekCopy( char ** Data, int PeekPos = 0, int MaxLen = -1 ); // Return stiched data copied to supplied pointer (create if not exist) bool FindStr( const char * SearchStr, int SearchLen, int &FoundPos, int StartPos = 0 ); // Search buffer directly // Change data on buffer int Push( bool Overwrite, const char * Data, int Len = -1 ); int Clear( int ClearLen = -1 ); int Pop( char ** Data, int MaxLen = -1 ); int PopCopy( char ** Data, int MaxLen = -1 ); // File operations int ReadFromFD( int Handle, int MaxRead = -1, bool Overwrite = false ); int WriteToFD( int Handle, int MaxWrite = -1 ); // Miscellaneous int Size() { return BufSize; }; int Len() { return BufLen; }; }; //--------------------------------------------------------------------------- class CShiftBuffer { private: // Buffer Definition char * Buffer; // Memory allocated to buffer const int BufSize; // Size of allocated buffer int BufLen; // Total unread characters in buffer // Temporary output buffer char * OutBuffer; // Temporary output buffer for "stitched" (rollover) data public: // Life Cycle CShiftBuffer( int BufferSize ); ~CShiftBuffer(); // Direct Operations int Reset(); // Clear buffer and reset all pointers to start of buffer // Reading from buffer char PeekChar( int Pos = 0 ); // Return one character from buffer (do not remove from buffer int PeekDirect( char ** Data, int PeekPos = 0 ); // Return contiguous data pointer direct to buffer (continguous data couont returned) int Peek( char ** Data, int PeekPos = 0, int MaxLen = -1 ); // Return stiched data copied to temporary output buffer int PeekCopy( char ** Data, int PeekPos = 0, int MaxLen = -1 ); // Return stiched data copied to supplied pointer (create if not exist) bool FindStr( const char * SearchStr, int SearchLen, int &FoundPos, int StartPos = 0 ); // Search buffer directly // Change data on buffer int Push( bool Overwrite, const char * Data, int Len = -1 ); int Clear( int ClearLen = -1 ); int Pop( char ** Data, int MaxLen = -1 ); int PopCopy( char ** Data, int MaxLen = -1 ); // File operations int ReadFromFD( int Handle, int MaxRead = -1 ); int WriteToFD( int Handle, int MaxWrite = -1 ); // Miscellaneous int Size() { return BufSize; }; int Len() { return BufLen; }; }; //--------------------------------------------------------------------------- #endif /* REDACORE_BUFFERCORE_H_ */