12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #ifndef CORE_RINGBUFFER_H
- #define CORE_RINGBUFFER_H
- #include "data/Array.h"
- namespace Core {
- template<typename T, int N>
- class RingBuffer final {
- Array<T, N> data;
- int writeIndex = 0;
- int readIndex = 0;
- int values = 0;
- public:
- bool add(const T& t) {
- if(values >= N) {
- return true;
- }
- data[writeIndex] = t;
- writeIndex = (writeIndex + 1) % N;
- values++;
- return false;
- }
- int getLength() const {
- return values;
- }
- bool canRemove() const {
- return values > 0;
- }
- bool remove() {
- if(values <= 0) {
- return true;
- }
- values--;
- readIndex = (readIndex + 1) % N;
- return false;
- }
- T& operator[](int index) {
- return data[(index + readIndex) % N];
- }
- const T& operator[](int index) const {
- return data[(index + readIndex) % N];
- }
- void clear() {
- writeIndex = 0;
- readIndex = 0;
- values = 0;
- }
- };
- }
- #endif
|