CRingBuffer class was designed to be a fast and convenient way of collecting incoming data from a socket, then retrieving it one text line at a time. It intentionally does no dynamic buffer allocation/deallocation during runtime, so as to avoid memory fragmentation and other issues.
It was created in Visual C++ 6 as part of the creation of separate POP3 and SMTP servers. The entire class is contained in a single header file, and uses
CString in one function (and as such, requires MFC, although it would be trivial to remove that dependency).
The CRingBuffer Interface
BOOL Create( int iBufSize );
BOOL WriteBinary( char * pBuf, int nBufLen );
BOOL ReadBinary( char * pBuf, int nBufLen );
BOOL PeekChar( int iPos, char & ch );
BOOL FindChar( char chLookFor, int & riPos );
BOOL ReadTextLine( CString & strLine );
How To Use It
As previously mentioned, this class is designed for server applications. It probably has very little use outside of that scope. That said, here is an extremely simplified example of how to use it.
using namespace Stardust;
#define INCOMING_RING_BUFFER_SIZE (1024*16) // or whatever
m_ringbuf.Create( INCOMING_RING_BUFFER_SIZE + 1 );
char m_chInBuf[ INCOMING_BUFFER_SIZE + 1 ];
int iNumberOfBytesRead = 0;
&& iNumberOfBytesRead > 0 )
while( m_ringbuf.ReadTextLine(strLine) )
if( !ON_INCOMING( strLine ) )
In the above example,
ON_INCOMING are placeholders for functions that read and accept incoming data respectively.
READ_INCOMING reads raw incoming data from the socket while
ON_INCOMING accepts incoming data from the socket, one line at a time.