82 pop_all(std::array<BufferType, BufferSize>& popped_values,
size_t& num_popped);
97 size_t filled_size = 0;
100 filled_size = BufferSize;
104 filled_size = (m_tail > m_head ? (BufferSize - m_tail) + m_head : m_head - m_tail);
116 size_t remaining_size = 0;
123 remaining_size = (m_tail > m_head ? m_tail - m_head : BufferSize - (m_head - m_tail));
125 return remaining_size;
142 std::array<BufferType, BufferSize> m_buffer = {};
165template <
typename BufferType,
size_t BufferSize>
169 if (get_remaining() == 0)
176 m_buffer[m_head] = push_value;
177 m_head = (m_head + 1) % BufferSize;
178 m_full = (m_head == m_tail);
183template <
typename BufferType,
size_t BufferSize>
188 if (get_remaining() == 0)
190 m_buffer[m_head] = push_value;
191 m_head = (m_head + 1) % BufferSize;
198 m_buffer[m_head] = push_value;
199 m_head = (m_head + 1) % BufferSize;
200 m_full = (m_head == m_tail);
205template <
typename BufferType,
size_t BufferSize>
209 if (get_filled() == 0)
216 popped_value = m_buffer[m_tail];
218 m_tail = (m_tail + 1) % BufferSize;
224template <
typename BufferType,
size_t BufferSize>
226 std::array<BufferType, BufferSize>& popped_values,
size_t& num_popped)
229 while (get_filled() > 0)
232 popped_values[num_popped] = m_buffer[m_tail];
235 m_tail = (m_tail + 1) % BufferSize;
241template <
typename BufferType,
size_t BufferSize>
Circular Buffer.
Definition fsb_circular_buffer.h:43
CircularBufferStatus
Definition fsb_circular_buffer.h:19
void reset()
Reset buffer to empty state.
Definition fsb_circular_buffer.h:242
size_t get_remaining() const
Get number of remaining buffer positions.
Definition fsb_circular_buffer.h:114
static size_t get_size()
Get total buffer size.
Definition fsb_circular_buffer.h:133
CircularBufferStatus push(BufferType push_value)
Add value to the buffer if there is space available.
Definition fsb_circular_buffer.h:166
CircularBufferStatus pop(BufferType &popped_value)
Get oldest value from buffer.
Definition fsb_circular_buffer.h:206
CircularBufferStatus pop_all(std::array< BufferType, BufferSize > &popped_values, size_t &num_popped)
Pop all values from the buffer into an array.
Definition fsb_circular_buffer.h:225
size_t get_filled() const
Get number of filled buffer positions.
Definition fsb_circular_buffer.h:95
CircularBufferStatus force_push(BufferType push_value)
Add value to buffer and overwrite oldest value if buffer is full.
Definition fsb_circular_buffer.h:185
@ OVERWRITE
Adding to buffer overwrote existing data.
@ EMPTY
Operation failed, buffer is empty.
@ FULL
Operation failed, buffer is full.
@ SUCCESS
Successful operation.