mxlib
c++ tools for analyzing astronomical data and other tasks by Jared R. Males. [git repo]
|
A circular buffer class. More...
A circular buffer class.
Three options for the circular buffer are provided, each inheriting the same underlying interface. The choices vary the way in which the wrapping is handled at the end of the storage. These are:
Benchmarks are clear that circularBufferIndex is fastest for sequential acceess, e.g. one element after the other in sequential order, by something like 30%.
For random access circularBufferBranch is possibly slightly faster, but not enough tests were performed to be conclusive.
circularBufferMod is always much slower due to use of the %
operator.
The memory overhead of circularBufferIndex is 2*maxEntries*sizeof(indexT)
, where maxEntries
is the maximum length of the buffer, and indexT is the type used for indexing and sizes.
perform circular buffer testing on an isolated core, with one test per executable
implement a circular buffer with fixed power-of-two size to test &
modulo
Classes | |
class | mx::sigproc::circularBufferBase< _derivedT, _storedT, _indexT > |
CRTP base class for all circular buffers, providing the underlying memory management and accessors. More... | |
class | mx::sigproc::circularBufferBranch< _storedT, _indexT > |
Circular buffer which wraps with an if statement (branching) [faster than mod, less memory than index]. More... | |
class | mx::sigproc::circularBufferMod< _storedT, _indexT > |
Circular buffer which wraps with the mod opoerator [very slow]. More... | |
class | mx::sigproc::circularBufferIndex< _storedT, _indexT > |
Circular buffer which wraps with a pre-populated indices array [generally fastest]. More... | |