EchoMap 2026-07-25 6d3977c
An experimental cross-platform digital signal processing application for sound-source localisation.
Loading...
Searching...
No Matches
echomap::ThreadSafeQueue< ValueT > Class Template Reference

Provides a straightforward thread-safe double-ended queue implementation. More...

#include <ThreadSafeQueue.hpp>

Public Member Functions

void produce (ValueT value)
 Enqueue a value.
std::optional< ValueT > try_consume ()
 Attempt to dequeue a value.
std::optional< ValueT > wait_consume (std::stop_token stop_token)
 Attempt to dequeue a value.
bool empty () const
 Checks the state of the queue.
void clear ()
 Empties the queue.

Private Attributes

std::mutex mutex
std::condition_variable_any cv
std::deque< ValueT > queue

Detailed Description

template<class ValueT>
requires std::move_constructible<ValueT>
class echomap::ThreadSafeQueue< ValueT >

Provides a straightforward thread-safe double-ended queue implementation.

Values of the templated type may be enqueued ("produced") and dequeued ("consumed") in a blocking or non-blocking (but interruptable) model. All operations are atomic.

Template Parameters
ValueTThe type of values to be queued.

Definition at line 29 of file ThreadSafeQueue.hpp.

Member Function Documentation

◆ clear()

template<class ValueT>
void echomap::ThreadSafeQueue< ValueT >::clear ( )
inline

Empties the queue.

Definition at line 106 of file ThreadSafeQueue.hpp.

107 {
108 std::scoped_lock lock(mutex);
109 queue.clear();
110 }
Provides a straightforward thread-safe double-ended queue implementation.

◆ empty()

template<class ValueT>
bool echomap::ThreadSafeQueue< ValueT >::empty ( ) const
inlinenodiscard

Checks the state of the queue.

Returns
Is the queue empty?

Definition at line 97 of file ThreadSafeQueue.hpp.

98 {
100 return queue.empty();
101 }

◆ produce()

template<class ValueT>
void echomap::ThreadSafeQueue< ValueT >::produce ( ValueT value)
inline

Enqueue a value.

Parameters
valueThe value to enqueue.

Definition at line 37 of file ThreadSafeQueue.hpp.

40 {
42 queue.push_back(std::move(value));
43 cv.notify_one();
44 }

◆ try_consume()

template<class ValueT>
std::optional< ValueT > echomap::ThreadSafeQueue< ValueT >::try_consume ( )
inline

Attempt to dequeue a value.

This function does not block.

Returns
The dequeued value, or the empty optional if there were no results available.

Definition at line 53 of file ThreadSafeQueue.hpp.

54 {
56
57 if (!queue.empty()) {
58 auto value = std::move(queue.front());
59 queue.pop_front();
60 return value;
61 }
62
63 return std::nullopt;
64 }

◆ wait_consume()

template<class ValueT>
std::optional< ValueT > echomap::ThreadSafeQueue< ValueT >::wait_consume ( std::stop_token stop_token)
inline

Attempt to dequeue a value.

This function blocks until interrupted by the stop token or a value is available on the queue.

Parameters
stop_tokenThe interrupt token for the thread block.
Returns
The dequeued value, or an empty optional if the block was interrupted prior to a value becoming available.

Definition at line 75 of file ThreadSafeQueue.hpp.

78 {
80 cv.wait(lock, stop_token, [this] {
81 return !queue.empty();
82 });
83
84 if (queue.empty())
85 return std::nullopt;
86
87 auto value = std::move(queue.front());
88 queue.pop_front();
89 return value;
90 }

Member Data Documentation

◆ cv

template<class ValueT>
std::condition_variable_any echomap::ThreadSafeQueue< ValueT >::cv
private

Definition at line 114 of file ThreadSafeQueue.hpp.

◆ mutex

template<class ValueT>
std::mutex echomap::ThreadSafeQueue< ValueT >::mutex
mutableprivate

Definition at line 113 of file ThreadSafeQueue.hpp.

◆ queue

template<class ValueT>
std::deque<ValueT> echomap::ThreadSafeQueue< ValueT >::queue
private

Definition at line 115 of file ThreadSafeQueue.hpp.


The documentation for this class was generated from the following file: