9#include "fsb_circular_buffer.h"
22enum class QueueStatus : uint8_t
36template <
typename QueueType,
size_t QueueSize>
class Queue
56 QueueStatus
push(QueueType push_value);
72 QueueStatus
pop(QueueType& popped_value);
81 QueueStatus
pop_all(std::array<QueueType, QueueSize>& popped_values,
size_t& num_popped);
92 std::array<QueueType, QueueSize>& popped_values,
size_t& num_popped,
93 const struct timespec& timeout);
102 bool m_initialized =
false;
103 pthread_mutex_t m_mutex = {};
104 pthread_cond_t m_cond_var = {};
118 m_initialized =
true;
127template <
typename QueueType,
size_t QueueSize> Queue<QueueType, QueueSize>::~Queue()
133 m_initialized =
false;
137template <
typename QueueType,
size_t QueueSize>
142 return QueueStatus::UNINITIALIZED;
146 return QueueStatus::ERROR;
153 return QueueStatus::FULL;
157 return QueueStatus::ERROR;
159 return QueueStatus::SUCCESS;
162template <
typename QueueType,
size_t QueueSize>
167 return QueueStatus::UNINITIALIZED;
171 return QueueStatus::ERROR;
178 return QueueStatus::OVERWRITE;
182 return QueueStatus::ERROR;
184 return QueueStatus::SUCCESS;
187template <
typename QueueType,
size_t QueueSize>
189 std::array<QueueType, QueueSize>& popped_values,
size_t& num_popped)
193 return QueueStatus::UNINITIALIZED;
197 return QueueStatus::ERROR;
205template <
typename QueueType,
size_t QueueSize>
207 std::array<QueueType, QueueSize>& popped_values,
size_t& num_popped,
208 const struct timespec& timeout)
213 return QueueStatus::UNINITIALIZED;
217 return QueueStatus::ERROR;
220 m_buffer.pop_all(popped_values, num_popped);
225 return QueueStatus::SUCCESS;
229 auto result = QueueStatus::SUCCESS;
237 m_buffer.pop_all(popped_values, num_popped);
243template <
typename QueueType,
size_t QueueSize>
248 return QueueStatus::UNINITIALIZED;
252 return QueueStatus::ERROR;
260template <
typename QueueType,
size_t QueueSize>
265 return QueueStatus::UNINITIALIZED;
269 return QueueStatus::ERROR;
273 return QueueStatus::SUCCESS;
Circular Buffer.
Definition fsb_circular_buffer.h:43
Queue.
Definition fsb_queue.h:37
CircularBufferStatus
Definition fsb_circular_buffer.h:19
@ OVERWRITE
Adding to buffer overwrote existing data.
@ FULL
Operation failed, buffer is full.
@ SUCCESS
Successful operation.
QueueStatus force_push(QueueType push_value)
Add value to buffer and overwrite oldest value if buffer is full.
Definition fsb_queue.h:163
QueueStatus reset()
Reset buffer to empty state.
Definition fsb_queue.h:261
QueueStatus pop_all(std::array< QueueType, QueueSize > &popped_values, size_t &num_popped)
Wait for a new value to be added to the buffer, then pop all values.
Definition fsb_queue.h:188
QueueStatus pop_wait(std::array< QueueType, QueueSize > &popped_values, size_t &num_popped, const struct timespec &timeout)
Wait for a new value to be added to the buffer, then pop all values.
Definition fsb_queue.h:206
QueueStatus pop(QueueType &popped_value)
Get oldest value from buffer.
Definition fsb_queue.h:244
QueueStatus push(QueueType push_value)
Add value to buffer if there is space available.
Definition fsb_queue.h:138
LockStatus condvar_wait_timeout(pthread_cond_t &cond_var, pthread_mutex_t &mutex, const struct timespec &timeout)
Wait on a condition variable with a timeout.
Definition fsb_thread.cpp:103
LockStatus
Status codes for lock and synchronization operations.
Definition fsb_thread.h:34
LockStatus mutex_lock(pthread_mutex_t &mutex)
Lock a mutex, blocking until the lock is acquired.
Definition fsb_thread.cpp:48
LockStatus mutex_destroy(pthread_mutex_t &mutex)
Destroy a mutex and release its resources.
Definition fsb_thread.cpp:64
LockStatus condvar_signal(pthread_cond_t &cond_var, bool broadcast=false)
Signal one or all threads waiting on a condition variable.
Definition fsb_thread.cpp:113
LockStatus mutex_unlock(pthread_mutex_t &mutex)
Unlock a mutex.
Definition fsb_thread.cpp:56
LockStatus mutex_initialize(pthread_mutex_t &mutex, bool shared=false)
Initialize a mutex.
Definition fsb_thread.cpp:23
LockStatus condvar_destroy(pthread_cond_t &cond_var)
Destroy a condition variable and release its resources.
Definition fsb_thread.cpp:130
LockStatus condvar_initialize(pthread_cond_t &cond_var, bool shared=false)
Initialize a condition variable.
Definition fsb_thread.cpp:72
@ TIMEOUT
Operation timed out.
@ SUCCESS
Operation completed successfully.