36 : m_buffer{buffer}, m_index{index} {}
64 : m_buffer{buffer}, m_index{index} {}
99 size_t size()
const {
return m_length; }
109 const T&
front()
const {
return (*
this)[0]; }
117 T&
back() {
return m_data[(m_front + m_length - 1) % m_data.size()]; }
126 return m_data[(m_front + m_length - 1) % m_data.size()];
135 if (m_data.size() == 0) {
139 m_front = ModuloDec(m_front);
141 m_data[m_front] = value;
143 if (m_length < m_data.size()) {
154 if (m_data.size() == 0) {
158 m_data[(m_front + m_length) % m_data.size()] = value;
160 if (m_length < m_data.size()) {
164 m_front = ModuloInc(m_front);
174 template <
class... Args>
176 if (m_data.size() == 0) {
180 m_front = ModuloDec(m_front);
182 m_data[m_front] = T{args...};
184 if (m_length < m_data.size()) {
195 template <
class... Args>
197 if (m_data.size() == 0) {
201 m_data[(m_front + m_length) % m_data.size()] = T{args...};
203 if (m_length < m_data.size()) {
207 m_front = ModuloInc(m_front);
218 T& temp = m_data[m_front];
219 m_front = ModuloInc(m_front);
232 return m_data[(m_front + m_length) % m_data.size()];
252 return m_data[(m_front + index) % m_data.size()];
259 return m_data[(m_front + index) % m_data.size()];
263 std::vector<T> m_data;
277 size_t ModuloInc(
size_t index) {
return (index + 1) % m_data.size(); }
285 size_t ModuloDec(
size_t index) {
287 return m_data.size() - 1;
Definition: circular_buffer.h:55
std::ptrdiff_t difference_type
Definition: circular_buffer.h:59
const_iterator & operator++()
Definition: circular_buffer.h:66
const_reference operator*() const
Definition: circular_buffer.h:76
T value_type
Definition: circular_buffer.h:58
bool operator==(const const_iterator &) const =default
std::forward_iterator_tag iterator_category
Definition: circular_buffer.h:57
const T & const_reference
Definition: circular_buffer.h:61
const_iterator(const circular_buffer *buffer, size_t index)
Definition: circular_buffer.h:63
T * pointer
Definition: circular_buffer.h:60
const_iterator operator++(int)
Definition: circular_buffer.h:70
Definition: circular_buffer.h:27
iterator & operator++()
Definition: circular_buffer.h:38
bool operator==(const iterator &) const =default
reference operator*()
Definition: circular_buffer.h:48
std::ptrdiff_t difference_type
Definition: circular_buffer.h:31
iterator operator++(int)
Definition: circular_buffer.h:42
T & reference
Definition: circular_buffer.h:33
T * pointer
Definition: circular_buffer.h:32
iterator(circular_buffer *buffer, size_t index)
Definition: circular_buffer.h:35
std::forward_iterator_tag iterator_category
Definition: circular_buffer.h:29
T value_type
Definition: circular_buffer.h:30
This is a simple circular buffer so we don't need to "bucket brigade" copy old values.
Definition: circular_buffer.h:18
size_t size() const
Returns number of elements in buffer.
Definition: circular_buffer.h:99
void emplace_back(Args &&... args)
Push a new value onto the back of the buffer that is constructed with the provided constructor argume...
Definition: circular_buffer.h:196
iterator end()
Definition: circular_buffer.h:84
iterator begin()
Definition: circular_buffer.h:83
T pop_back()
Pop value at back of buffer.
Definition: circular_buffer.h:230
circular_buffer & operator=(const circular_buffer &)=default
void emplace_front(Args &&... args)
Push a new value onto the front of the buffer that is constructed with the provided constructor argum...
Definition: circular_buffer.h:175
circular_buffer & operator=(circular_buffer &&)=default
T & operator[](size_t index)
Definition: circular_buffer.h:251
void push_front(T value)
Push a new value onto the front of the buffer.
Definition: circular_buffer.h:134
circular_buffer(size_t size)
Definition: circular_buffer.h:20
const_iterator cbegin() const
Definition: circular_buffer.h:91
void resize(size_t size)
Resizes internal buffer to given size.
Definition: circular_buffer.inc:15
circular_buffer(const circular_buffer &)=default
circular_buffer(circular_buffer &&)=default
void reset()
Empties internal buffer.
Definition: circular_buffer.h:243
void push_back(T value)
Push a new value onto the back of the buffer.
Definition: circular_buffer.h:153
T pop_front()
Pop value at front of buffer.
Definition: circular_buffer.h:217
const T & operator[](size_t index) const
Definition: circular_buffer.h:258
const T & back() const
Returns value at back of buffer.
Definition: circular_buffer.h:125
const_iterator end() const
Definition: circular_buffer.h:87
const_iterator begin() const
Definition: circular_buffer.h:86
T & front()
Returns value at front of buffer.
Definition: circular_buffer.h:104
const_iterator cend() const
Definition: circular_buffer.h:92
const T & front() const
Returns value at front of buffer.
Definition: circular_buffer.h:109
T & back()
Returns value at back of buffer.
Definition: circular_buffer.h:117
Definition: ntcore_cpp.h:26