Author: Finlay Davidson <finlay.davidson@coderclass.nl>
circularbuffer: Add circular buffer utility struct
src/utility/CircularBuffer.h | 51 ++++++++++++++++++++++++++++++++++++++
diff --git a/src/utility/CircularBuffer.h b/src/utility/CircularBuffer.h new file mode 100644 index 0000000000000000000000000000000000000000..c8abe92e4e58284004ee866cc93fabcbed7e7ed1 --- /dev/null +++ b/src/utility/CircularBuffer.h @@ -0,0 +1,51 @@ +#pragma once + +#include <array> +#include <cstddef> + +namespace Pinetime { + namespace Utility { + template <class T, size_t S> + struct CircularBuffer { + constexpr size_t Size() const { + return S; + } + + size_t Idx() const { + return idx; + } + + T& operator[](size_t n) { + return data[(idx + n) % S]; + } + + const T& operator[](size_t n) const { + return data[(idx + n) % S]; + } + + void operator++() { + idx++; + idx %= S; + } + + void operator++(int) { + operator++(); + } + + void operator--() { + if (idx > 0) { + idx--; + } else { + idx = S - 1; + } + } + + void operator--(int) { + operator--(); + } + + std::array<T, S> data; + size_t idx = 0; + }; + } +}