20template <
class T,
size_t N>
23 static_assert(N > 0,
"Circular buffer size cannot be zero.");
34 : m_buffer{buffer}, m_index{
index} {}
71 : m_buffer{buffer}, m_index{
index} {}
179 constexpr size_t size()
const {
return m_length; }
184 constexpr T&
front() {
return (*
this)[0]; }
189 constexpr const T&
front()
const {
return (*
this)[0]; }
197 constexpr T&
back() {
return m_data[(m_front + m_length - 1) % N]; }
205 constexpr const T&
back()
const {
206 return m_data[(m_front + m_length - 1) % N];
215 m_front = ModuloDec(m_front);
217 m_data[m_front] = value;
230 m_data[(m_front + m_length) % N] = value;
236 m_front = ModuloInc(m_front);
246 template <
class... Args>
248 m_front = ModuloDec(m_front);
250 m_data[m_front] = T{args...};
263 template <
class... Args>
265 m_data[(m_front + m_length) % N] = T{args...};
271 m_front = ModuloInc(m_front);
282 T& temp = m_data[m_front];
283 m_front = ModuloInc(m_front);
296 return m_data[(m_front + m_length) % N];
311 return m_data[(m_front +
index) % N];
318 return m_data[(m_front +
index) % N];
322 std::array<T, N> m_data;
335 constexpr size_t ModuloInc(
size_t index) {
return (
index + 1) % N; }
342 constexpr size_t ModuloDec(
size_t index) {
Definition static_circular_buffer.h:62
std::bidirectional_iterator_tag iterator_category
Definition static_circular_buffer.h:64
constexpr const_iterator & operator--()
Definition static_circular_buffer.h:82
constexpr const_reference operator*() const
Definition static_circular_buffer.h:92
constexpr const_iterator & operator++()
Definition static_circular_buffer.h:73
constexpr const_iterator(const static_circular_buffer *buffer, size_t index)
Definition static_circular_buffer.h:70
const T & const_reference
Definition static_circular_buffer.h:68
T * pointer
Definition static_circular_buffer.h:67
constexpr const_iterator operator--(int)
Definition static_circular_buffer.h:86
constexpr const_iterator operator++(int)
Definition static_circular_buffer.h:77
T value_type
Definition static_circular_buffer.h:65
constexpr bool operator==(const const_iterator &) const =default
std::ptrdiff_t difference_type
Definition static_circular_buffer.h:66
Definition static_circular_buffer.h:25
T value_type
Definition static_circular_buffer.h:28
constexpr iterator(static_circular_buffer *buffer, size_t index)
Definition static_circular_buffer.h:33
std::ptrdiff_t difference_type
Definition static_circular_buffer.h:29
constexpr iterator & operator++()
Definition static_circular_buffer.h:36
constexpr iterator operator--(int)
Definition static_circular_buffer.h:49
constexpr reference operator*()
Definition static_circular_buffer.h:55
std::bidirectional_iterator_tag iterator_category
Definition static_circular_buffer.h:27
constexpr bool operator==(const iterator &) const =default
T & reference
Definition static_circular_buffer.h:31
constexpr iterator operator++(int)
Definition static_circular_buffer.h:40
T * pointer
Definition static_circular_buffer.h:30
constexpr iterator & operator--()
Definition static_circular_buffer.h:45
This is a simple circular buffer so we don't need to "bucket brigade" copy old values.
Definition static_circular_buffer.h:21
constexpr void emplace_back(Args &&... args)
Push a new value onto the back of the buffer that is constructed with the provided constructor argume...
Definition static_circular_buffer.h:264
constexpr iterator begin()
Returns begin iterator.
Definition static_circular_buffer.h:105
constexpr T & operator[](size_t index)
Definition static_circular_buffer.h:310
constexpr reverse_iterator rend()
Returns reverse end iterator.
Definition static_circular_buffer.h:146
constexpr T pop_back()
Pop value at back of buffer.
Definition static_circular_buffer.h:294
constexpr const_iterator begin() const
Returns const begin iterator.
Definition static_circular_buffer.h:117
constexpr const T & front() const
Returns value at front of buffer.
Definition static_circular_buffer.h:189
std::reverse_iterator< iterator > reverse_iterator
Definition static_circular_buffer.h:99
constexpr T & front()
Returns value at front of buffer.
Definition static_circular_buffer.h:184
constexpr const_reverse_iterator rbegin() const
Returns const reverse begin iterator.
Definition static_circular_buffer.h:151
constexpr reverse_iterator rbegin()
Returns reverse begin iterator.
Definition static_circular_buffer.h:141
constexpr void emplace_front(Args &&... args)
Push a new value onto the front of the buffer that is constructed with the provided constructor argum...
Definition static_circular_buffer.h:247
constexpr const_reverse_iterator crbegin() const
Returns const reverse begin iterator.
Definition static_circular_buffer.h:165
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition static_circular_buffer.h:100
constexpr const T & operator[](size_t index) const
Definition static_circular_buffer.h:317
constexpr void reset()
Empties internal buffer.
Definition static_circular_buffer.h:302
constexpr void push_back(T value)
Push a new value onto the back of the buffer.
Definition static_circular_buffer.h:229
constexpr T & back()
Returns value at back of buffer.
Definition static_circular_buffer.h:197
constexpr iterator end()
Returns end iterator.
Definition static_circular_buffer.h:110
constexpr const T & back() const
Returns value at back of buffer.
Definition static_circular_buffer.h:205
constexpr T pop_front()
Pop value at front of buffer.
Definition static_circular_buffer.h:281
constexpr const_reverse_iterator crend() const
Returns const reverse end iterator.
Definition static_circular_buffer.h:172
constexpr const_iterator end() const
Returns const end iterator.
Definition static_circular_buffer.h:122
constexpr void push_front(T value)
Push a new value onto the front of the buffer.
Definition static_circular_buffer.h:214
constexpr const_iterator cbegin() const
Returns const begin iterator.
Definition static_circular_buffer.h:129
constexpr const_reverse_iterator rend() const
Returns const reverse end iterator.
Definition static_circular_buffer.h:158
constexpr const_iterator cend() const
Returns const end iterator.
Definition static_circular_buffer.h:134
constexpr size_t size() const
Returns number of elements in buffer.
Definition static_circular_buffer.h:179
Definition ntcore_cpp.h:26