MarlinMT  0.1.0
marlinmt::concurrency::Queue< T, class > Class Template Reference

Queue class. More...

#include <Queue.h>

Public Member Functions

 Queue ()=default
 
 ~Queue ()=default
 
 Queue (const Queue &)=delete
 
Queueoperator= (const Queue &)=delete
 
 Queue (std::size_t maxsize)
 Constructor. More...
 
bool push (T &value)
 Push a value to the queue. More...
 
bool pop (T &value)
 Pop and get the front element in the queue. More...
 
bool empty () const
 Whether the queue is empty. More...
 
std::size_t maxSize () const
 Get the maximum queue size. More...
 
std::size_t setMaxSize (std::size_t maxsize)
 Set the maximum queue size. More...
 
bool isFull () const
 Check whether the queue has reached the maximum allowed size. More...
 
void clear ()
 Clear the queue. More...
 
std::size_t freeSlots () const
 Get the number of free slots in the queue. More...
 

Private Attributes

std::queue< T > _queue {}
 The underlying queue object. More...
 
std::mutex _mutex {}
 The synchronization mutex. More...
 
std::size_t _maxSize {std::numeric_limits<std::size_t>::max()}
 The maximum size of the queue. More...
 

Detailed Description

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
class marlinmt::concurrency::Queue< T, class >

Queue class.

A simplified thread safe queue container. Support maximum size setting. The type T must implement move assignement

Definition at line 22 of file Queue.h.

Constructor & Destructor Documentation

◆ Queue() [1/3]

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
marlinmt::concurrency::Queue< T, class >::Queue ( )
default

◆ ~Queue()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
marlinmt::concurrency::Queue< T, class >::~Queue ( )
default

◆ Queue() [2/3]

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
marlinmt::concurrency::Queue< T, class >::Queue ( const Queue< T, class > &  )
delete

◆ Queue() [3/3]

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
marlinmt::concurrency::Queue< T, class >::Queue ( std::size_t  maxsize)
inline

Constructor.

Parameters
maxsizethe maximum queue size

Definition at line 34 of file Queue.h.

Member Function Documentation

◆ clear()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
void marlinmt::concurrency::Queue< T, class >::clear ( )
inline

◆ empty()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
bool marlinmt::concurrency::Queue< T, class >::empty ( ) const
inline

◆ freeSlots()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
std::size_t marlinmt::concurrency::Queue< T, class >::freeSlots ( ) const
inline

Get the number of free slots in the queue.

Definition at line 120 of file Queue.h.

Referenced by marlinmt::concurrency::ThreadPool< InputType, OutputType >::freeSlots().

◆ isFull()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
bool marlinmt::concurrency::Queue< T, class >::isFull ( ) const
inline

Check whether the queue has reached the maximum allowed size.

Definition at line 102 of file Queue.h.

Referenced by marlinmt::concurrency::ThreadPool< InputType, OutputType >::push().

◆ maxSize()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
std::size_t marlinmt::concurrency::Queue< T, class >::maxSize ( ) const
inline

Get the maximum queue size.

Definition at line 81 of file Queue.h.

◆ operator=()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
Queue& marlinmt::concurrency::Queue< T, class >::operator= ( const Queue< T, class > &  )
delete

◆ pop()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
bool marlinmt::concurrency::Queue< T, class >::pop ( T &  value)
inline

Pop and get the front element in the queue.

The queue type must support move operation

Parameters
valuethe value to receive

Definition at line 60 of file Queue.h.

Referenced by marlinmt::concurrency::Worker< IN, OUT >::run().

◆ push()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
bool marlinmt::concurrency::Queue< T, class >::push ( T &  value)
inline

Push a value to the queue.

WARNING: On success, the element is moved in the queue container, else it is not !

Parameters
valuethe value to push

Definition at line 45 of file Queue.h.

Referenced by marlinmt::concurrency::ThreadPool< InputType, OutputType >::push().

◆ setMaxSize()

template<typename T, class = typename std::enable_if<std::is_move_assignable<T>::value>::type>
std::size_t marlinmt::concurrency::Queue< T, class >::setMaxSize ( std::size_t  maxsize)
inline

Set the maximum queue size.

Note that the queue is NOT resized if the new value is smaller than the old size. The value of the old max size is returned

Parameters
maxsizethe maximum queue size to set

Definition at line 93 of file Queue.h.

Referenced by marlinmt::concurrency::ThreadPool< InputType, OutputType >::setMaxQueueSize().

Member Data Documentation

◆ _maxSize

◆ _mutex

◆ _queue


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