diff options
Diffstat (limited to 'src/utility')
| -rw-r--r-- | src/utility/CircularBuffer.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/utility/CircularBuffer.h b/src/utility/CircularBuffer.h new file mode 100644 index 00000000..c8abe92e --- /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; + }; + } +} |
