A single-producer, single-consumer queue. Properties:
More...
#include <QueueSPSC.h>
Inherits gts::AlignedAllocator< GTS_NO_SHARING_CACHE_LINE_SIZE >.
|
using | value_type = T |
|
using | size_type = size_t |
|
using | allocator_type = TAllocator |
|
template<typename T, typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
class gts::QueueSPSC< T, TAllocator >
A single-producer, single-consumer queue. Properties:
- Wait-free.
- Unbound.
- Linearizable.
- Template Parameters
-
T | The type stored in the container. |
TAllocator | The allocator used by the storage backing. |
◆ QueueSPSC() [1/3]
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
Constructs an empty container with the given 'allocator'.
◆ ~QueueSPSC()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
QueueSPSC::~QueueSPSC |
( |
| ) |
|
Destructs the container. The destructors of the elements are called and the used storage is deallocated.
◆ QueueSPSC() [2/3]
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
QueueSPSC::QueueSPSC |
( |
QueueSPSC< T, TAllocator > const & |
other | ) |
|
Copy constructor. Constructs the container with the copy of the contents of 'other'.
◆ QueueSPSC() [3/3]
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
QueueSPSC::QueueSPSC |
( |
QueueSPSC< T, TAllocator > && |
other | ) |
|
Move constructor. Constructs the container with the contents of other using move semantics. After the move, other is invalid.
◆ capacity()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
QueueSPSC< T, TAllocator >::size_type QueueSPSC::capacity |
( |
| ) |
const |
- Returns
- The capacity of the queue.
◆ clear()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
void QueueSPSC::clear |
( |
| ) |
|
Removes all elements from the queue.
◆ empty()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
bool QueueSPSC::empty |
( |
| ) |
const |
- Returns
- True of the queue is empty, false otherwise.
◆ get_allocator()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
QueueSPSC< T, TAllocator >::allocator_type QueueSPSC::get_allocator |
( |
| ) |
const |
- Returns
- This queue's allocator.
◆ operator=() [1/2]
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
Move assignment operator. Replaces the contents with those of other using move semantics. After the move, other is invalid.
◆ operator=() [2/2]
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
QueueSPSC< T, TAllocator > & QueueSPSC::operator= |
( |
QueueSPSC< T, TAllocator > const & |
other | ) |
|
Copy assignment operator. Replaces the contents with a copy of the contents of 'other'.
◆ reserve()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
Increases the capacity of the queue. Does nothing if 'sizePow2' < capacity.
◆ size()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
QueueSPSC< T, TAllocator >::size_type QueueSPSC::size |
( |
| ) |
const |
- Returns
- The number of elements in the queue.
◆ tryPop()
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
bool QueueSPSC::tryPop |
( |
value_type & |
out | ) |
|
Pops an element from the queue and copies it into 'out'.
- Returns
- True if the pop succeeded, false otherwise.
◆ tryPush() [1/2]
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
bool QueueSPSC::tryPush |
( |
const value_type & |
val | ) |
|
Copies 'val' to the back of the queue.
- Returns
- True if the push, false otherwise.
◆ tryPush() [2/2]
template<typename T , typename TAllocator = gts::AlignedAllocator<GTS_NO_SHARING_CACHE_LINE_SIZE>>
bool QueueSPSC::tryPush |
( |
value_type && |
val | ) |
|
Moves 'val' to the back of the queue.
- Returns
- True if the push, false otherwise.