Helios Engine
A modular ECS based data-oriented C++23 game engine framework
Loading...
Searching...
No Matches
helios::ecs::TypedAsyncMessageStorage< T > Class Template Referencefinal

Typed async message storage backed by a lock-free concurrent queue. More...

#include <async_queue.hpp>

Inheritance diagram for helios::ecs::TypedAsyncMessageStorage< T >:
helios::ecs::details::AsyncMessageStorage

Public Member Functions

 TypedAsyncMessageStorage ()=default
 TypedAsyncMessageStorage (const TypedAsyncMessageStorage &)=delete
 TypedAsyncMessageStorage (TypedAsyncMessageStorage &&) noexcept=default
 ~TypedAsyncMessageStorage () override=default
TypedAsyncMessageStorageoperator= (const TypedAsyncMessageStorage &)=delete
TypedAsyncMessageStorageoperator= (TypedAsyncMessageStorage &&) noexcept=default
void Clear () override
 Clears all messages from the queue by draining it.
void Enqueue (const T &message)
 Enqueues a single message into the queue.
void Enqueue (T &&message)
 Enqueues a single message into the queue.
void Enqueue (AsyncMessageQueueProducerToken &token, const T &message)
 Enqueues a single message into the queue using a producer token.
void Enqueue (AsyncMessageQueueProducerToken &token, T &&message)
 Enqueues a single message into the queue using a producer token.
template<std::ranges::input_range R>
requires std::same_as<std::ranges::range_value_t<R>, T>
void EnqueueBulk (R &&messages)
 Enqueues multiple messages in bulk.
template<std::ranges::input_range R>
requires std::same_as<std::ranges::range_value_t<R>, T>
void EnqueueBulk (AsyncMessageQueueProducerToken &token, R &&messages)
 Enqueues multiple messages in bulk using a producer token.
Dequeue ()
 Dequeues a single message from the queue.
Dequeue (AsyncMessageQueueConsumerToken &token)
 Dequeues a single message from the queue.
bool Dequeue (T &dest)
 Dequeues a single message from the queue.
bool Dequeue (AsyncMessageQueueConsumerToken &token, T &dest)
 Dequeues a single message from the queue.
template<typename It>
requires std::output_iterator<It, T>
size_t Into (It out, size_t max_count=std::numeric_limits< size_t >::max())
 Moves messages into an output iterator (dequeues them).
template<typename It>
requires std::output_iterator<It, T>
size_t Into (AsyncMessageQueueConsumerToken &token, It out, size_t max_count=std::numeric_limits< size_t >::max())
 Moves messages into an output iterator using a consumer token.
AsyncMessageQueueProducerToken MakeProducerToken ()
 Gets the producer token for this queue.
AsyncMessageQueueConsumerToken MakeConsumerToken ()
 Gets the consumer token for this queue.
bool Empty () const noexcept override
 Checks if the queue is empty.
size_t SizeApprox () const noexcept override
 Gets approximate number of messages stored in the queue.
Public Member Functions inherited from helios::ecs::details::AsyncMessageStorage
virtual ~AsyncMessageStorage ()=default

Detailed Description

template<AsyncMessageTrait T>
class helios::ecs::TypedAsyncMessageStorage< T >

Typed async message storage backed by a lock-free concurrent queue.

Note
Thread-safe for concurrent enqueue/dequeue operations.
Template Parameters
TAsync message type

Definition at line 60 of file async_queue.hpp.

Constructor & Destructor Documentation

◆ TypedAsyncMessageStorage() [1/3]

template<AsyncMessageTrait T>
helios::ecs::TypedAsyncMessageStorage< T >::TypedAsyncMessageStorage ( )
default

◆ TypedAsyncMessageStorage() [2/3]

template<AsyncMessageTrait T>
helios::ecs::TypedAsyncMessageStorage< T >::TypedAsyncMessageStorage ( const TypedAsyncMessageStorage< T > & )
delete

◆ TypedAsyncMessageStorage() [3/3]

template<AsyncMessageTrait T>
helios::ecs::TypedAsyncMessageStorage< T >::TypedAsyncMessageStorage ( TypedAsyncMessageStorage< T > && )
defaultnoexcept

◆ ~TypedAsyncMessageStorage()

template<AsyncMessageTrait T>
helios::ecs::TypedAsyncMessageStorage< T >::~TypedAsyncMessageStorage ( )
overridedefault

Member Function Documentation

◆ Clear()

template<AsyncMessageTrait T>
void helios::ecs::TypedAsyncMessageStorage< T >::Clear ( )
inlineoverridevirtual

Clears all messages from the queue by draining it.

Implements helios::ecs::details::AsyncMessageStorage.

Definition at line 222 of file async_queue.hpp.

◆ Dequeue() [1/4]

template<AsyncMessageTrait T>
T helios::ecs::TypedAsyncMessageStorage< T >::Dequeue ( )
inline

Dequeues a single message from the queue.

Returns
Dequeued message or default-constructed T if the queue is empty

Definition at line 273 of file async_queue.hpp.

◆ Dequeue() [2/4]

template<AsyncMessageTrait T>
T helios::ecs::TypedAsyncMessageStorage< T >::Dequeue ( AsyncMessageQueueConsumerToken & token)
inline

Dequeues a single message from the queue.

Parameters
tokenConsumer token for improved throughput
Returns
Dequeued message or default-constructed T if the queue is empty

Definition at line 280 of file async_queue.hpp.

◆ Dequeue() [3/4]

template<AsyncMessageTrait T>
bool helios::ecs::TypedAsyncMessageStorage< T >::Dequeue ( AsyncMessageQueueConsumerToken & token,
T & dest )
inline

Dequeues a single message from the queue.

Parameters
tokenConsumer token for improved throughput
destReference to store the dequeued message
Returns
True if an message was dequeued and stored in dest, false if the queue was empty (dest is unchanged)

Definition at line 157 of file async_queue.hpp.

◆ Dequeue() [4/4]

template<AsyncMessageTrait T>
bool helios::ecs::TypedAsyncMessageStorage< T >::Dequeue ( T & dest)
inline

Dequeues a single message from the queue.

Parameters
destReference to store the dequeued message
Returns
True if an message was dequeued and stored in dest, false if the queue was empty (dest is unchanged)

Definition at line 148 of file async_queue.hpp.

◆ Empty()

template<AsyncMessageTrait T>
bool helios::ecs::TypedAsyncMessageStorage< T >::Empty ( ) const
inlinenodiscardoverridevirtualnoexcept

Checks if the queue is empty.

Returns
True if no messages are stored, false otherwise

Implements helios::ecs::details::AsyncMessageStorage.

Definition at line 205 of file async_queue.hpp.

◆ Enqueue() [1/4]

template<AsyncMessageTrait T>
void helios::ecs::TypedAsyncMessageStorage< T >::Enqueue ( AsyncMessageQueueProducerToken & token,
const T & message )
inline

Enqueues a single message into the queue using a producer token.

Parameters
tokenProducer token for improved throughput
messageMessage to enqueue

Definition at line 95 of file async_queue.hpp.

◆ Enqueue() [2/4]

template<AsyncMessageTrait T>
void helios::ecs::TypedAsyncMessageStorage< T >::Enqueue ( AsyncMessageQueueProducerToken & token,
T && message )
inline

Enqueues a single message into the queue using a producer token.

Parameters
tokenProducer token for improved throughput
messageMessage to enqueue

Definition at line 106 of file async_queue.hpp.

◆ Enqueue() [3/4]

template<AsyncMessageTrait T>
void helios::ecs::TypedAsyncMessageStorage< T >::Enqueue ( const T & message)
inline

Enqueues a single message into the queue.

Parameters
messageMessage to enqueue

Definition at line 78 of file async_queue.hpp.

◆ Enqueue() [4/4]

template<AsyncMessageTrait T>
void helios::ecs::TypedAsyncMessageStorage< T >::Enqueue ( T && message)
inline

Enqueues a single message into the queue.

Parameters
messageMessage to enqueue

Definition at line 88 of file async_queue.hpp.

◆ EnqueueBulk() [1/2]

template<AsyncMessageTrait T>
requires std::same_as<std::ranges::range_value_t<R>, T>
template<std::ranges::input_range R>
requires std::same_as<std::ranges::range_value_t<R>, T>
void helios::ecs::TypedAsyncMessageStorage< T >::EnqueueBulk ( AsyncMessageQueueProducerToken & token,
R && messages )
inline

Enqueues multiple messages in bulk using a producer token.

Template Parameters
RRange type
Parameters
tokenProducer token for improved throughput
messagesRange of messages to enqueue

Definition at line 253 of file async_queue.hpp.

◆ EnqueueBulk() [2/2]

template<AsyncMessageTrait T>
requires std::same_as<std::ranges::range_value_t<R>, T>
template<std::ranges::input_range R>
requires std::same_as<std::ranges::range_value_t<R>, T>
void helios::ecs::TypedAsyncMessageStorage< T >::EnqueueBulk ( R && messages)
inline

Enqueues multiple messages in bulk.

Template Parameters
RRange type
Parameters
messagesRange of messages to enqueue

Definition at line 232 of file async_queue.hpp.

◆ Into() [1/2]

template<AsyncMessageTrait T>
requires std::output_iterator<It, T>
template<typename It>
requires std::output_iterator<It, T>
size_t helios::ecs::TypedAsyncMessageStorage< T >::Into ( AsyncMessageQueueConsumerToken & token,
It out,
size_t max_count = std::numeric_limits<size_t>::max() )
inline

Moves messages into an output iterator using a consumer token.

Template Parameters
ItOutput iterator type
Parameters
tokenConsumer token for improved throughput
outOutput iterator to receive messages
max_countMaximum number of messages to move (default: all messages)
Returns
Number of messages actually dequeued

Definition at line 304 of file async_queue.hpp.

◆ Into() [2/2]

template<AsyncMessageTrait T>
requires std::output_iterator<It, T>
template<typename It>
requires std::output_iterator<It, T>
size_t helios::ecs::TypedAsyncMessageStorage< T >::Into ( It out,
size_t max_count = std::numeric_limits<size_t>::max() )
inline

Moves messages into an output iterator (dequeues them).

Template Parameters
ItOutput iterator type
Parameters
outOutput iterator to receive messages
max_countMaximum number of messages to move (default: all messages)
Returns
Number of messages actually dequeued

Definition at line 290 of file async_queue.hpp.

◆ MakeConsumerToken()

template<AsyncMessageTrait T>
AsyncMessageQueueConsumerToken helios::ecs::TypedAsyncMessageStorage< T >::MakeConsumerToken ( )
inlinenodiscard

Gets the consumer token for this queue.

Returns
Consumer token

Definition at line 197 of file async_queue.hpp.

◆ MakeProducerToken()

template<AsyncMessageTrait T>
AsyncMessageQueueProducerToken helios::ecs::TypedAsyncMessageStorage< T >::MakeProducerToken ( )
inlinenodiscard

Gets the producer token for this queue.

Returns
Producer token

Definition at line 189 of file async_queue.hpp.

◆ operator=() [1/2]

template<AsyncMessageTrait T>
TypedAsyncMessageStorage & helios::ecs::TypedAsyncMessageStorage< T >::operator= ( const TypedAsyncMessageStorage< T > & )
delete

◆ operator=() [2/2]

template<AsyncMessageTrait T>
TypedAsyncMessageStorage & helios::ecs::TypedAsyncMessageStorage< T >::operator= ( TypedAsyncMessageStorage< T > && )
defaultnoexcept

◆ SizeApprox()

template<AsyncMessageTrait T>
size_t helios::ecs::TypedAsyncMessageStorage< T >::SizeApprox ( ) const
inlinenodiscardoverridevirtualnoexcept

Gets approximate number of messages stored in the queue.

Returns
Message count

Implements helios::ecs::details::AsyncMessageStorage.

Definition at line 213 of file async_queue.hpp.