Sirius  0.0.0
Public Member Functions | List of all members
sirius::utils::ConcurrentQueue< T > Class Template Reference

Concurrent queue. More...

#include <sirius/utils/concurrent_queue.h>

Public Member Functions

 ConcurrentQueue (std::size_t max_queue_size=10)
 Instanciate a concurrent queue with a maximum size. More...
 
 ~ConcurrentQueue ()=default
 
 ConcurrentQueue (const ConcurrentQueue &)=delete
 
ConcurrentQueueoperator= (const ConcurrentQueue &)=delete
 
 ConcurrentQueue (ConcurrentQueue &&)=delete
 
ConcurrentQueueoperator= (ConcurrentQueue &&)=delete
 
void Push (T &&element, std::error_code &ec)
 Push an element in the queue. More...
 
Pop (std::error_code &ec)
 Pop an element from the queue. More...
 
std::size_t Size ()
 Get queue size. More...
 
bool Empty ()
 Queue is empty. More...
 
bool CanPop ()
 Elements can be popped from the queue. More...
 
void Activate ()
 Activate the queue. More...
 
void Deactivate ()
 Deactivate the queue. More...
 
void DeactivateAndClear ()
 Deactivate the queue and clear its content. More...
 
bool IsActive ()
 Can the queue be filled with new elements. More...
 

Detailed Description

template<typename T>
class sirius::utils::ConcurrentQueue< T >

Concurrent queue.

ConcurrentQueue is a basic thread safe implementation of a queue. ConcurrentQueue has a limited size. Push and Pop methods can be used in a multi-threaded context.

This implementation is inspired by https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11

Warning
Push and Pop methods may block.

Constructor & Destructor Documentation

◆ ConcurrentQueue() [1/3]

template<typename T >
sirius::utils::ConcurrentQueue< T >::ConcurrentQueue ( std::size_t  max_queue_size = 10)

Instanciate a concurrent queue with a maximum size.

The queue is active after instantiation

Parameters
max_queue_sizelimit the queue size

◆ ~ConcurrentQueue()

template<typename T >
sirius::utils::ConcurrentQueue< T >::~ConcurrentQueue ( )
default

◆ ConcurrentQueue() [2/3]

template<typename T >
sirius::utils::ConcurrentQueue< T >::ConcurrentQueue ( const ConcurrentQueue< T > &  )
delete

◆ ConcurrentQueue() [3/3]

template<typename T >
sirius::utils::ConcurrentQueue< T >::ConcurrentQueue ( ConcurrentQueue< T > &&  )
delete

Member Function Documentation

◆ Activate()

template<typename T >
void sirius::utils::ConcurrentQueue< T >::Activate ( )

Activate the queue.

The queue will be able to receive new elements

◆ CanPop()

template<typename T >
bool sirius::utils::ConcurrentQueue< T >::CanPop ( )

Elements can be popped from the queue.

Returns
boolean

◆ Deactivate()

template<typename T >
void sirius::utils::ConcurrentQueue< T >::Deactivate ( )

Deactivate the queue.

The queue will not be able to receive new elements

◆ DeactivateAndClear()

template<typename T >
void sirius::utils::ConcurrentQueue< T >::DeactivateAndClear ( )

Deactivate the queue and clear its content.

The queue will not be able to receive new elements and its content will be erased

◆ Empty()

template<typename T >
bool sirius::utils::ConcurrentQueue< T >::Empty ( )

Queue is empty.

Returns
true if queue is empty

◆ IsActive()

template<typename T >
bool sirius::utils::ConcurrentQueue< T >::IsActive ( )

Can the queue be filled with new elements.

Returns
true if the queue is still active

◆ operator=() [1/2]

template<typename T >
ConcurrentQueue& sirius::utils::ConcurrentQueue< T >::operator= ( const ConcurrentQueue< T > &  )
delete

◆ operator=() [2/2]

template<typename T >
ConcurrentQueue& sirius::utils::ConcurrentQueue< T >::operator= ( ConcurrentQueue< T > &&  )
delete

◆ Pop()

template<typename T >
T sirius::utils::ConcurrentQueue< T >::Pop ( std::error_code &  ec)

Pop an element from the queue.

Parameters
ecreturn status
Returns
An available element from the queue
Warning
This method may block until there is an element to pop
If no element is available and the queue is not active, this method returns a default constructed element and ec is set

◆ Push()

template<typename T >
void sirius::utils::ConcurrentQueue< T >::Push ( T &&  element,
std::error_code &  ec 
)

Push an element in the queue.

Parameters
elementto push to the queue
ecreturn status
Warning
This method may block until there is an available spot
If the queue is not active, the element will be dropped and ec is set

◆ Size()

template<typename T >
std::size_t sirius::utils::ConcurrentQueue< T >::Size ( )

Get queue size.

Returns
Queue size

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