iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
Public Member Functions | List of all members
IPlugQueue< T > Class Template Referencefinal

A lock-free SPSC queue used to transfer data between threads based on MLQueue.h by Randy Jones based on https://kjellkod.wordpress.com/2012/11/28/c-debt-paid-in-full-wait-free-lock-free-queue/. More...

#include <IPlugQueue.h>

Public Member Functions

 IPlugQueue (int size)
 IPlugQueue constructor. More...
 
 IPlugQueue (const IPlugQueue &)=delete
 
IPlugQueueoperator= (const IPlugQueue &)=delete
 
void Resize (int size)
 Changes the queue capacity. More...
 
bool Push (const T &item)
 Adds an item to the queue. More...
 
bool Pop (T &item)
 Removes and retrieves an item from the queue. More...
 
template<typename... Args>
bool PushFromArgs (Args ...args)
 Constructs and adds an item to the queue in-place from arguments. More...
 
size_t ElementsAvailable () const
 Returns the number of elements currently in the queue. More...
 
const T & Peek ()
 Returns a const reference to the next item without removing it Useful for reading elements while a criterion is met. More...
 
bool WasEmpty () const
 Checks if the queue is currently empty. More...
 
bool WasFull () const
 Checks if the queue is currently full. More...
 

Detailed Description

template<typename T>
class IPlugQueue< T >

A lock-free SPSC queue used to transfer data between threads based on MLQueue.h by Randy Jones based on https://kjellkod.wordpress.com/2012/11/28/c-debt-paid-in-full-wait-free-lock-free-queue/.

Definition at line 31 of file IPlugQueue.h.

Constructor & Destructor Documentation

◆ IPlugQueue()

template<typename T >
IPlugQueue< T >::IPlugQueue ( int  size)
inline

IPlugQueue constructor.

Parameters
sizeThe queue capacity (number of elements)

Definition at line 36 of file IPlugQueue.h.

References IPlugQueue< T >::Resize().

◆ ~IPlugQueue()

template<typename T >
IPlugQueue< T >::~IPlugQueue ( )
inline

Definition at line 41 of file IPlugQueue.h.

Member Function Documentation

◆ ElementsAvailable()

template<typename T >
size_t IPlugQueue< T >::ElementsAvailable ( ) const
inline

Returns the number of elements currently in the queue.

Returns
The number of elements available to pop

Definition at line 106 of file IPlugQueue.h.

Referenced by VoiceAllocator::ProcessEvents().

◆ Peek()

template<typename T >
const T & IPlugQueue< T >::Peek ( )
inline

Returns a const reference to the next item without removing it Useful for reading elements while a criterion is met.

Can be used like: while (q.ElementsAvailable() && q.Peek().mTime < 100) { T elem; q.Pop(elem); ... }

Returns
const reference to the next item in the queue

Definition at line 118 of file IPlugQueue.h.

◆ Pop()

template<typename T >
bool IPlugQueue< T >::Pop ( T &  item)
inline

Removes and retrieves an item from the queue.

Parameters
itemReference to store the retrieved item
Returns
true if an item was successfully retrieved
false if the queue is empty

Definition at line 74 of file IPlugQueue.h.

Referenced by VoiceAllocator::ProcessEvents().

◆ Push()

template<typename T >
bool IPlugQueue< T >::Push ( const T &  item)
inline

Adds an item to the queue.

Parameters
itemThe item to add to the queue
Returns
true if the item was successfully added
false if the queue is full

Definition at line 57 of file IPlugQueue.h.

Referenced by VoiceAllocator::AddEvent().

◆ PushFromArgs()

template<typename T >
template<typename... Args>
bool IPlugQueue< T >::PushFromArgs ( Args ...  args)
inline

Constructs and adds an item to the queue in-place from arguments.

Parameters
args...Arguments to forward to the item's constructor
Returns
true if the item was successfully added
false if the queue is full

Definition at line 91 of file IPlugQueue.h.

Referenced by IPlugCLAP::BeginInformHostOfParamChange(), IPlugCLAP::EndInformHostOfParamChange(), IPlugCLAP::InformHostOfParamChange(), and IPlugAPIBase::SendParameterValueFromAPI().

◆ Resize()

template<typename T >
void IPlugQueue< T >::Resize ( int  size)
inline

Changes the queue capacity.

Parameters
sizeThe new queue capacity (number of elements)

Definition at line 48 of file IPlugQueue.h.

Referenced by IPlugQueue< T >::IPlugQueue().

◆ WasEmpty()

template<typename T >
bool IPlugQueue< T >::WasEmpty ( ) const
inline

Checks if the queue is currently empty.

Returns
true if the queue is empty
false if the queue contains elements

Definition at line 127 of file IPlugQueue.h.

◆ WasFull()

template<typename T >
bool IPlugQueue< T >::WasFull ( ) const
inline

Checks if the queue is currently full.

Returns
true if the queue is full
false if the queue has space for more elements

Definition at line 135 of file IPlugQueue.h.


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