RADLib
RADical C++ application framework
RADData::RADSpscQueue< T > Class Template Reference

Lock-free single-producer/single-consumer bounded queue. More...

#include <RADDataStructures.h>

Public Member Functions

 RADSpscQueue (size_t capacity)
 Creates a queue with usable capacity rounded to a power of two. More...
 
 ~RADSpscQueue ()
 Destroys any elements still queued. More...
 
 RADSpscQueue (const RADSpscQueue &)=delete
 SPSC queues own atomic storage and cannot be copied. More...
 
RADSpscQueueoperator= (const RADSpscQueue &)=delete
 SPSC queues own atomic storage and cannot be copied. More...
 
bool empty () const noexcept
 Returns true when no item is available. More...
 
size_t capacity () const noexcept
 Returns usable queue capacity. More...
 
bool try_push (const T &value)
 Attempts to push a copy; returns false when full. More...
 
bool try_push (T &&value)
 Attempts to push a moved value; returns false when full. More...
 
template<typename... Args>
bool emplace (Args &&... args)
 Attempts to construct an item in-place; returns false when full. More...
 
bool try_pop (T &out)
 Attempts to pop into out; returns false when empty. More...
 

Detailed Description

template<typename T>
class RADData::RADSpscQueue< T >

Lock-free single-producer/single-consumer bounded queue.

Constructor & Destructor Documentation

◆ RADSpscQueue() [1/2]

template<typename T >
RADData::RADSpscQueue< T >::RADSpscQueue ( size_t  capacity)
inlineexplicit

Creates a queue with usable capacity rounded to a power of two.

◆ ~RADSpscQueue()

template<typename T >
RADData::RADSpscQueue< T >::~RADSpscQueue ( )
inline

Destroys any elements still queued.

◆ RADSpscQueue() [2/2]

template<typename T >
RADData::RADSpscQueue< T >::RADSpscQueue ( const RADSpscQueue< T > &  )
delete

SPSC queues own atomic storage and cannot be copied.

Member Function Documentation

◆ capacity()

template<typename T >
size_t RADData::RADSpscQueue< T >::capacity ( ) const
inlinenoexcept

Returns usable queue capacity.

◆ emplace()

template<typename T >
template<typename... Args>
bool RADData::RADSpscQueue< T >::emplace ( Args &&...  args)
inline

Attempts to construct an item in-place; returns false when full.

◆ empty()

template<typename T >
bool RADData::RADSpscQueue< T >::empty ( ) const
inlinenoexcept

Returns true when no item is available.

◆ operator=()

template<typename T >
RADSpscQueue& RADData::RADSpscQueue< T >::operator= ( const RADSpscQueue< T > &  )
delete

SPSC queues own atomic storage and cannot be copied.

◆ try_pop()

template<typename T >
bool RADData::RADSpscQueue< T >::try_pop ( T &  out)
inline

Attempts to pop into out; returns false when empty.

◆ try_push() [1/2]

template<typename T >
bool RADData::RADSpscQueue< T >::try_push ( const T &  value)
inline

Attempts to push a copy; returns false when full.

◆ try_push() [2/2]

template<typename T >
bool RADData::RADSpscQueue< T >::try_push ( T &&  value)
inline

Attempts to push a moved value; returns false when full.


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