Mercurial > hg > btrack
annotate src/CircularBuffer.h @ 89:5ef334c782f3
Moved some parts of the algorithm from arrays needing lots of data moved around to lighted circular buffers
author | Adam Stark <adamstark.uk@gmail.com> |
---|---|
date | Fri, 04 Mar 2016 18:10:23 +0000 |
parents | |
children | f6708e4c69f1 |
rev | line source |
---|---|
adamstark@89 | 1 // |
adamstark@89 | 2 // CircularBuffer.hpp |
adamstark@89 | 3 // BTrack Tests |
adamstark@89 | 4 // |
adamstark@89 | 5 // Created by Adam Stark on 04/02/2016. |
adamstark@89 | 6 // Copyright © 2016 Adam Stark. All rights reserved. |
adamstark@89 | 7 // |
adamstark@89 | 8 |
adamstark@89 | 9 #ifndef CircularBuffer_h |
adamstark@89 | 10 #define CircularBuffer_h |
adamstark@89 | 11 |
adamstark@89 | 12 #include <vector> |
adamstark@89 | 13 |
adamstark@89 | 14 class CircularBuffer |
adamstark@89 | 15 { |
adamstark@89 | 16 public: |
adamstark@89 | 17 CircularBuffer() : writeIndex(0) |
adamstark@89 | 18 { |
adamstark@89 | 19 |
adamstark@89 | 20 } |
adamstark@89 | 21 |
adamstark@89 | 22 double &operator[](int i) |
adamstark@89 | 23 { |
adamstark@89 | 24 int index = (i + writeIndex) % buffer.size(); |
adamstark@89 | 25 return buffer[index]; |
adamstark@89 | 26 } |
adamstark@89 | 27 |
adamstark@89 | 28 void addSampleToEnd (double v) |
adamstark@89 | 29 { |
adamstark@89 | 30 buffer[writeIndex] = v; |
adamstark@89 | 31 writeIndex = (writeIndex + 1) % buffer.size(); |
adamstark@89 | 32 } |
adamstark@89 | 33 |
adamstark@89 | 34 void resize(int size) |
adamstark@89 | 35 { |
adamstark@89 | 36 buffer.resize(size); |
adamstark@89 | 37 writeIndex = 0; |
adamstark@89 | 38 } |
adamstark@89 | 39 |
adamstark@89 | 40 private: |
adamstark@89 | 41 |
adamstark@89 | 42 std::vector<double> buffer; |
adamstark@89 | 43 int writeIndex; |
adamstark@89 | 44 }; |
adamstark@89 | 45 |
adamstark@89 | 46 #endif /* CircularBuffer_hpp */ |