#ifndef CORE_RINGBUFFER_H #define CORE_RINGBUFFER_H #include "data/Array.h" namespace Core { template class RingBuffer final { Array 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