From 6d5847e0467863addbbb1d8e85905dd5e682d145 Mon Sep 17 00:00:00 2001 From: Finlay Davidson Date: Fri, 17 Mar 2023 22:14:19 +0100 Subject: [PATCH] circularbuffer: Add circular buffer utility struct --- src/utility/CircularBuffer.h | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/utility/CircularBuffer.h 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 +#include + +namespace Pinetime { + namespace Utility { + template + 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 data; + size_t idx = 0; + }; + } +}