I recently needed a class that stored a character array as a circular buffer. If
you are unfamiliar with circular buffer, it is a permanently allocated buffer
that has both a read and write position. I have done a few of them in the past,
but had lost all of my examples. So I wrote a new one and placed it into a class
called CircularBuffer. The CircularBuffer can be read from and written to, and
it has methods to get the read and write count. As the buffer is written to the
write position increases til the end of the buffer is reached, at that point the
write position is wrapped back to the start of the buffer and writing starts
from there. The same happens to the read operation also, but the read position
is incremented. It is important to note that the read position will never be
greater than the write positon, since if it were we would be reading data that
had not been written to the buffer. Likewise, the write position will never wrap
the read position otherwise data that had not been read would be
The basic operations are read and write, both fail if an
overlap condition could occur.
To get the number of availible characters
to read the readCount method is used. If the count is greater than zero use the
read method to get the latest contents written into the buffer.
I have included a small test application in a project TestQue. The test driver is in
the TestQue.cpp. It is multithreaded win32 console app developed using VC6. The
CircularBuffer code is in CircularBuffer.cpp and h.