42template<
typename BufferType,
size_t BufferSize>
93 size_t filled_size = 0;
96 filled_size = BufferSize;
100 filled_size = (m_tail > m_head ? (BufferSize - m_tail) + m_head : m_head - m_tail);
112 size_t remaining_size = 0;
119 remaining_size = (m_tail > m_head ? m_tail - m_head : BufferSize - (m_head - m_tail));
121 return remaining_size;
138 std::array<BufferType, BufferSize> m_buffer;
161template<
typename BufferType,
size_t BufferSize>
165 if (GetRemaining() == 0)
172 m_buffer[m_head] = push_value;
173 m_head = (m_head + 1) % BufferSize;
174 m_full = (m_head == m_tail);
179template<
typename BufferType,
size_t BufferSize>
183 if (GetRemaining() == 0)
185 m_buffer[m_head] = push_value;
186 m_head = (m_head + 1) % BufferSize;
193 m_buffer[m_head] = push_value;
194 m_head = (m_head + 1) % BufferSize;
195 m_full = (m_head == m_tail);
200template<
typename BufferType,
size_t BufferSize>
204 if (GetFilled() == 0)
211 popped_value = m_buffer[m_tail];
213 m_tail = (m_tail + 1) % BufferSize;
219template<
typename BufferType,
size_t BufferSize>
223 while (GetFilled() > 0)
226 popped_values[num_popped] = m_buffer[m_tail];
229 m_tail = (m_tail + 1) % BufferSize;
236template<
typename BufferType,
size_t BufferSize>
Circular Buffer.
Definition fsb_circular_buffer.h:44
CircularBufferStatus
Definition fsb_circular_buffer.h:19
void Reset()
Reset buffer to empty state.
Definition fsb_circular_buffer.h:237
size_t GetRemaining() const
Get number of remaining buffer positions.
Definition fsb_circular_buffer.h:110
size_t GetSize() const
Get total buffer size.
Definition fsb_circular_buffer.h:129
size_t GetFilled() const
Get number of filled buffer positions.
Definition fsb_circular_buffer.h:91
CircularBufferStatus push(BufferType push_value)
Add value to the buffer if there is space available.
Definition fsb_circular_buffer.h:162
CircularBufferStatus pop(BufferType &popped_value)
Get oldest value from buffer.
Definition fsb_circular_buffer.h:201
CircularBufferStatus pop_all(std::array< BufferType, BufferSize > &popped_values, size_t &num_popped)
Get oldest value from buffer.
Definition fsb_circular_buffer.h:220
CircularBufferStatus force_push(BufferType push_value)
Add value to buffer and overwrite oldest value if buffer is full.
Definition fsb_circular_buffer.h:180
@ OVERWRITE
Adding to buffer overwrote existing data.
@ EMPTY
Operation failed, buffer is empty.
@ FULL
Operation failed, buffer is full.
@ SUCCESS
Successful operation.