From FOLDOC, the Free On-Line Dictionary Of Computing
(http://foldoc.doc.ic.ac.uk/foldoc/):
<programming> An area of memory used to store a continuous
stream of data by starting again at the beginning of the
buffer after reaching the end. A circular buffer is usually
written by one process and read by another. Separate read and
write pointers are maintained. These are not allowed to
pass each other otherwise either unread data would be
overwritten or invalid data would be read.
For example, to initialise a circular buffer (a.k.a. rolling buffer), which is
20 words long starting at address 0x3210, pseudo-code might look like this:
#define BufferBase (0x3210)
#define BufferSize (20)
ReadPointer := 0
WritePointer := 0
Empty := true
To add to the buffer:
if ((WritePointer = ReadPointer) && (Empty = false)) {
ERROR ("Buffer overflow")
}
*(BufferBase + WritePointer) := WriteData
WritePointer := ((WritePointer + 1) mod BufferSize)
Empty := false
To read from the buffer:
if (Empty = true) {
ERROR ("Buffer underflow")
}
ReadData := *(BufferBase + ReadPointer)
ReadPointer := ((ReadPointer + 1) mod BufferSize)
if (ReadPointer = WritePointer) {
Empty := true
}