blob: afb6e6373b592d15f720cff14578b8a64f0645f2 [file] [log] [blame]
Tom Tsou28670fb2015-08-21 19:32:58 -07001#include <stdlib.h>
2#include <stddef.h>
3#include <vector>
4
5class RadioBuffer {
6public:
7 RadioBuffer(size_t numSegments, size_t segmentLen,
8 size_t hLen, bool outDirection);
9
10 ~RadioBuffer();
11
12 const size_t getSegmentLen() { return segmentLen; };
13 const size_t getNumSegments() { return numSegments; };
14 const size_t getAvailSamples() { return availSamples; };
15 const size_t getAvailSegments() { return availSamples / segmentLen; };
16
17 const size_t getFreeSamples()
18 {
19 return bufferLen - availSamples;
20 }
21
22 const size_t getFreeSegments()
23 {
24 return getFreeSamples() / segmentLen;
25 }
26
27 void reset();
28
29 /* Output direction */
30 const float *getReadSegment();
31 bool write(const float *wr, size_t len);
32 bool zero(size_t len);
33
34 /* Input direction */
35 float *getWriteSegment();
36 bool zeroWriteSegment();
37 bool read(float *rd, size_t len);
38
39private:
40 size_t writeIndex, readIndex, availSamples;
41 size_t bufferLen, numSegments, segmentLen, hLen;
42 float *buffer;
43 std::vector<float *> segments;
44 bool outDirection;
45};