blob: e5aa315bf592ed90e4cee76b184eb891c7483f7e [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
Alexander Chemeris89bca9b2017-03-17 13:04:10 -070012 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; }
Tom Tsou28670fb2015-08-21 19:32:58 -070016
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};