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} {}
181 constexpr size_t size()
const {
return m_length; }
186 constexpr T&
front() {
return (*
this)[0]; }
191 constexpr const T&
front()
const {
return (*
this)[0]; }
199 constexpr T&
back() {
return m_data[(m_front + m_length - 1) % N]; }
207 constexpr const T&
back()
const {
208 return m_data[(m_front + m_length - 1) % N];
217 m_front = ModuloDec(m_front);
219 m_data[m_front] = value;
232 m_data[(m_front + m_length) % N] = value;
238 m_front = ModuloInc(m_front);
248 template <
class... Args>
250 m_front = ModuloDec(m_front);
252 m_data[m_front] = T{args...};
265 template <
class... Args>
267 m_data[(m_front + m_length) % N] = T{args...};
273 m_front = ModuloInc(m_front);
284 T& temp = m_data[m_front];
285 m_front = ModuloInc(m_front);
298 return m_data[(m_front + m_length) % N];
313 return m_data[(m_front +
index) % N];
320 return m_data[(m_front +
index) % N];
324 std::array<T, N> m_data;
337 constexpr size_t ModuloInc(
size_t index) {
return (
index + 1) % N; }
344 constexpr size_t ModuloDec(
size_t index) {
@ index
Definition base.h:690
Definition static_circular_buffer.hpp:62
constexpr const_iterator & operator++()
Definition static_circular_buffer.hpp:73
constexpr const_iterator operator++(int)
Definition static_circular_buffer.hpp:77
constexpr bool operator==(const const_iterator &) const =default
constexpr const_reference operator*() const
Definition static_circular_buffer.hpp:92
constexpr const_iterator(const static_circular_buffer *buffer, size_t index)
Definition static_circular_buffer.hpp:70
constexpr const_iterator & operator--()
Definition static_circular_buffer.hpp:82
std::bidirectional_iterator_tag iterator_category
Definition static_circular_buffer.hpp:64
T value_type
Definition static_circular_buffer.hpp:65
const T & const_reference
Definition static_circular_buffer.hpp:68
constexpr const_iterator operator--(int)
Definition static_circular_buffer.hpp:86
std::ptrdiff_t difference_type
Definition static_circular_buffer.hpp:66
T * pointer
Definition static_circular_buffer.hpp:67
Definition static_circular_buffer.hpp:25
constexpr iterator & operator--()
Definition static_circular_buffer.hpp:45
std::ptrdiff_t difference_type
Definition static_circular_buffer.hpp:29
T * pointer
Definition static_circular_buffer.hpp:30
T & reference
Definition static_circular_buffer.hpp:31
std::bidirectional_iterator_tag iterator_category
Definition static_circular_buffer.hpp:27
constexpr iterator(static_circular_buffer *buffer, size_t index)
Definition static_circular_buffer.hpp:33
T value_type
Definition static_circular_buffer.hpp:28
constexpr iterator & operator++()
Definition static_circular_buffer.hpp:36
constexpr bool operator==(const iterator &) const =default
constexpr iterator operator++(int)
Definition static_circular_buffer.hpp:40
constexpr iterator operator--(int)
Definition static_circular_buffer.hpp:49
constexpr reference operator*()
Definition static_circular_buffer.hpp:55
This is a simple circular buffer so we don't need to "bucket brigade" copy old values.
Definition static_circular_buffer.hpp:21
constexpr const T & front() const
Returns value at front of buffer.
Definition static_circular_buffer.hpp:191
constexpr void reset()
Empties internal buffer.
Definition static_circular_buffer.hpp:304
constexpr size_t size() const
Returns number of elements in buffer.
Definition static_circular_buffer.hpp:181
constexpr const_iterator end() const
Returns const end iterator.
Definition static_circular_buffer.hpp:122
constexpr reverse_iterator rend()
Returns reverse end iterator.
Definition static_circular_buffer.hpp:148
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition static_circular_buffer.hpp:100
constexpr const T & back() const
Returns value at back of buffer.
Definition static_circular_buffer.hpp:207
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.hpp:249
constexpr const_iterator cend() const
Returns const end iterator.
Definition static_circular_buffer.hpp:135
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.hpp:266
constexpr const_reverse_iterator rbegin() const
Returns const reverse begin iterator.
Definition static_circular_buffer.hpp:153
constexpr iterator begin()
Returns begin iterator.
Definition static_circular_buffer.hpp:105
constexpr const T & operator[](size_t index) const
Definition static_circular_buffer.hpp:319
std::reverse_iterator< iterator > reverse_iterator
Definition static_circular_buffer.hpp:99
constexpr void push_back(T value)
Push a new value onto the back of the buffer.
Definition static_circular_buffer.hpp:231
constexpr T & back()
Returns value at back of buffer.
Definition static_circular_buffer.hpp:199
constexpr iterator end()
Returns end iterator.
Definition static_circular_buffer.hpp:110
constexpr T & operator[](size_t index)
Definition static_circular_buffer.hpp:312
constexpr T pop_back()
Pop value at back of buffer.
Definition static_circular_buffer.hpp:296
constexpr const_reverse_iterator crend() const
Returns const reverse end iterator.
Definition static_circular_buffer.hpp:174
constexpr void push_front(T value)
Push a new value onto the front of the buffer.
Definition static_circular_buffer.hpp:216
constexpr const_reverse_iterator rend() const
Returns const reverse end iterator.
Definition static_circular_buffer.hpp:160
constexpr reverse_iterator rbegin()
Returns reverse begin iterator.
Definition static_circular_buffer.hpp:143
constexpr const_iterator begin() const
Returns const begin iterator.
Definition static_circular_buffer.hpp:117
constexpr const_iterator cbegin() const
Returns const begin iterator.
Definition static_circular_buffer.hpp:130
constexpr T & front()
Returns value at front of buffer.
Definition static_circular_buffer.hpp:186
constexpr const_reverse_iterator crbegin() const
Returns const reverse begin iterator.
Definition static_circular_buffer.hpp:167
constexpr T pop_front()
Pop value at front of buffer.
Definition static_circular_buffer.hpp:283
Definition raw_os_ostream.hpp:19