46 lines
1012 B
C++
46 lines
1012 B
C++
#include <stdlib.h>
|
|
#include <stddef.h>
|
|
#include <vector>
|
|
|
|
class RadioBuffer {
|
|
public:
|
|
RadioBuffer(size_t numSegments, size_t segmentLen,
|
|
size_t hLen, bool outDirection);
|
|
|
|
~RadioBuffer();
|
|
|
|
const size_t getSegmentLen() { return segmentLen; }
|
|
const size_t getNumSegments() { return numSegments; }
|
|
const size_t getAvailSamples() { return availSamples; }
|
|
const size_t getAvailSegments() { return availSamples / segmentLen; }
|
|
|
|
const size_t getFreeSamples()
|
|
{
|
|
return bufferLen - availSamples;
|
|
}
|
|
|
|
const size_t getFreeSegments()
|
|
{
|
|
return getFreeSamples() / segmentLen;
|
|
}
|
|
|
|
void reset();
|
|
|
|
/* Output direction */
|
|
const float *getReadSegment();
|
|
bool write(const float *wr, size_t len);
|
|
bool zero(size_t len);
|
|
|
|
/* Input direction */
|
|
float *getWriteSegment();
|
|
bool zeroWriteSegment();
|
|
bool read(float *rd, size_t len);
|
|
|
|
private:
|
|
size_t writeIndex, readIndex, availSamples;
|
|
size_t bufferLen, numSegments, segmentLen, hLen;
|
|
float *buffer;
|
|
std::vector<float *> segments;
|
|
bool outDirection;
|
|
};
|