qb  2.0.0.0
C++17 Actor Framework
qb Issue Watch Star Fork Follow @isndev
Loading...
Searching...
No Matches
qb::lockfree::spsc::ringbuffer< T, _MaxSize > Class Template Reference

Fixed-size implementation of the SPSC ringbuffer. More...

#include <spsc.h>

Inheritance diagram for qb::lockfree::spsc::ringbuffer< T, _MaxSize >:
Collaboration diagram for qb::lockfree::spsc::ringbuffer< T, _MaxSize >:

Public Member Functions

bool enqueue (T const &t) noexcept
 Enqueue a single element into the buffer.
bool dequeue (T *ret) noexcept
 Dequeue a single element from the buffer.
template<bool _All = true>
size_t enqueue (T const *t, size_t size) noexcept
 Enqueue multiple elements into the buffer.
size_t dequeue (T *ret, size_t size) noexcept
 Dequeue multiple elements from the buffer.
template<typename Func>
size_t dequeue (Func const &func, T *ret, size_t size) noexcept
 Dequeue multiple elements and process them with a functor.
template<typename Func>
size_t consume_all (Func const &func) noexcept
 Process all available elements in the buffer using a functor.
Public Member Functions inherited from qb::lockfree::spsc::internal::ringbuffer< T >
bool empty ()
 Check if the buffer is empty.
Public Member Functions inherited from qb::nocopy
 nocopy ()=default
 Default constructor.
 nocopy (nocopy const &)=delete
 Deleted copy constructor.
 nocopy (nocopy const &&)=delete
 Deleted move constructor.
nocopyoperator= (nocopy const &)=delete
 Deleted copy assignment operator.
nocopyoperator= (nocopy &&)=delete
 Deleted move assignment operator.

Additional Inherited Members

Protected Member Functions inherited from qb::lockfree::spsc::internal::ringbuffer< T >
 ringbuffer ()
 Default constructor initializing indices.
size_t read_available (size_t const max_size) const
 Get the number of elements available for reading.
size_t write_available (size_t const max_size) const
 Get the number of slots available for writing.
bool enqueue (T const &t, T *buffer, size_t const max_size)
 Enqueue a single element into the buffer.
template<bool _All>
size_t enqueue (const T *input_buffer, size_t input_count, T *internal_buffer, size_t const max_size)
 Enqueue multiple elements into the buffer.
size_t dequeue (T *output_buffer, size_t output_count, T *internal_buffer, size_t const max_size)
 Dequeue multiple elements from the buffer.
template<typename _Func>
size_t consume_all (_Func const &functor, T *internal_buffer, size_t max_size)
 Process all available elements in the buffer using a functor.
const T & front (const T *internal_buffer) const
 Get a reference to the element at the read index (const version)
T & front (T *internal_buffer)
 Get a reference to the element at the read index.
Static Protected Member Functions inherited from qb::lockfree::spsc::internal::ringbuffer< T >
static size_t next_index (size_t arg, size_t const max_size)
 Calculate the next index in the buffer with wrap-around handling.
static size_t read_available (size_t write_index, size_t read_index, size_t const max_size)
 Calculate how many elements are available for reading.
static size_t write_available (size_t write_index, size_t read_index, size_t const max_size)
 Calculate how many elements can be written.

Detailed Description

template<typename T, size_t _MaxSize>
class qb::lockfree::spsc::ringbuffer< T, _MaxSize >

Fixed-size implementation of the SPSC ringbuffer.

This class provides a fixed-size compile-time SPSC ringbuffer implementation with a buffer size specified as a template parameter.

Template Parameters
TType of elements stored in the ringbuffer
_MaxSizeMaximum number of elements that can be stored

Member Function Documentation

◆ enqueue() [1/2]

template<typename T, size_t _MaxSize>
bool qb::lockfree::spsc::ringbuffer< T, _MaxSize >::enqueue ( T const & t)
inlinenoexcept

Enqueue a single element into the buffer.

Parameters
tElement to enqueue
Returns
true if the element was successfully enqueued, false if the buffer is full

◆ dequeue() [1/3]

template<typename T, size_t _MaxSize>
bool qb::lockfree::spsc::ringbuffer< T, _MaxSize >::dequeue ( T * ret)
inlinenoexcept

Dequeue a single element from the buffer.

Parameters
retPointer to store the dequeued element
Returns
true if an element was successfully dequeued, false if the buffer is empty

◆ enqueue() [2/2]

template<typename T, size_t _MaxSize>
template<bool _All = true>
size_t qb::lockfree::spsc::ringbuffer< T, _MaxSize >::enqueue ( T const * t,
size_t size )
inlinenoexcept

Enqueue multiple elements into the buffer.

Template Parameters
_AllIf true, either all elements are enqueued or none
Parameters
tPointer to source elements
sizeNumber of elements to enqueue
Returns
Number of elements successfully enqueued

◆ dequeue() [2/3]

template<typename T, size_t _MaxSize>
size_t qb::lockfree::spsc::ringbuffer< T, _MaxSize >::dequeue ( T * ret,
size_t size )
inlinenoexcept

Dequeue multiple elements from the buffer.

Parameters
retDestination buffer for dequeued elements
sizeMaximum number of elements to dequeue
Returns
Number of elements successfully dequeued

◆ dequeue() [3/3]

template<typename T, size_t _MaxSize>
template<typename Func>
size_t qb::lockfree::spsc::ringbuffer< T, _MaxSize >::dequeue ( Func const & func,
T * ret,
size_t size )
inlinenoexcept

Dequeue multiple elements and process them with a functor.

Template Parameters
FuncFunctor type
Parameters
funcFunction to call after dequeuing elements
retDestination buffer for dequeued elements
sizeMaximum number of elements to dequeue
Returns
Number of elements successfully dequeued and processed

◆ consume_all()

template<typename T, size_t _MaxSize>
template<typename Func>
size_t qb::lockfree::spsc::ringbuffer< T, _MaxSize >::consume_all ( Func const & func)
inlinenoexcept

Process all available elements in the buffer using a functor.

Template Parameters
FuncFunctor type
Parameters
funcFunction to call for each batch of elements
Returns
Number of elements processed