3 #ifndef VISR_LIBRBBL_CIRCULAR_BUFFER_HPP_INCLUDED 4 #define VISR_LIBRBBL_CIRCULAR_BUFFER_HPP_INCLUDED 33 template<
typename DataType >
52 explicit CircularBuffer( std::size_t numberOfChannels, std::size_t length, std::size_t alignment = 0 );
67 std::size_t
length()
const {
return mLength; }
73 std::size_t
stride()
const {
return mStride; }
86 void write( DataType
const *
const * writeData,
87 std::size_t numberOfChannels,
88 std::size_t numberOfSamples,
89 std::size_t alignmentElements = 0 );
91 void write( DataType
const * writeData,
92 std::size_t channelStrideElements,
93 std::size_t numberOfChannels,
94 std::size_t numberOfSamples,
95 std::size_t alignmentElements = 0 );
114 DataType * getFirstWritePointer();
122 void getWritePointers( DataType * * writePointers );
130 void commitWrite( std::size_t numberOfElementsWritten );
139 void getReadPointers(
DelayIndexType delay, DataType
const * * readPointers )
const;
149 void getReadPointers(
DelayIndexType const *
const delay, DataType
const * * readPointers )
const;
160 assert( channelIndex < numberOfChannels() );
161 assert( delay <= length() );
162 return (mBasePointer + channelIndex * mStride + mAllocatedLength + mWriteHeadIndex) - delay;
173 std::unique_ptr<Impl> mImpl;
178 std::size_t
const mLength;
183 std::size_t
const mAllocatedLength;
188 std::size_t
const mStride;
193 std::size_t
const mNumberOfChannels;
199 DataType *
const mBasePointer;
204 std::size_t mWriteHeadIndex;
210 #endif // #ifndef VISR_LIBRBBL_CIRCULAR_BUFFER_HPP_INCLUDED std::size_t DelayIndexType
Definition: circular_buffer.hpp:42
std::size_t numberOfChannels() const
Definition: circular_buffer.hpp:62
Definition: circular_buffer.hpp:34
Definition: options.cpp:10
std::size_t stride() const
Definition: circular_buffer.hpp:73
std::size_t length() const
Definition: circular_buffer.hpp:67
DataType const * getReadPointer(std::size_t channelIndex, DelayIndexType delay) const
Definition: circular_buffer.hpp:157