Helios Engine
A modular ECS based data-oriented C++23 game engine framework
Loading...
Searching...
No Matches
helios::ecs::AsyncMessageQueue Class Reference

Async queue for managing multiple message types via lock-free concurrent queues. More...

#include <async_queue.hpp>

Public Types

using size_type = size_t

Public Member Functions

 AsyncMessageQueue ()=default
 AsyncMessageQueue (const AsyncMessageQueue &)=delete
 AsyncMessageQueue (AsyncMessageQueue &&) noexcept=default
 ~AsyncMessageQueue ()=default
AsyncMessageQueueoperator= (const AsyncMessageQueue &)=delete
AsyncMessageQueueoperator= (AsyncMessageQueue &&) noexcept=default
template<AsyncMessageTrait T>
void Register ()
 Registers an async message type with the queue.
void Clear ()
 Clears all messages from the queue maintaining all registered types.
template<AsyncMessageTrait T>
void Clear ()
 Clears messages of a specific type.
void Reset () noexcept
 Resets the queue by clearing all messages and unregistering all message types.
template<AsyncMessageTrait T>
void Reset () noexcept
 Resets the queue by clearing and unregistering a specific message type.
template<AsyncMessageTrait T>
void Enqueue (T &&message)
 Enqueues a single message into the queue.
template<AsyncMessageTrait T>
void Enqueue (AsyncMessageQueueProducerToken &token, T &&message)
 Enqueues a single message using a producer token for improved throughput.
template<std::ranges::input_range R>
requires AsyncMessageTrait<std::ranges::range_value_t<R>>
void EnqueueBulk (R &&messages)
 Enqueues multiple messages in bulk.
template<std::ranges::input_range R>
requires AsyncMessageTrait<std::ranges::range_value_t<R>>
void EnqueueBulk (AsyncMessageQueueProducerToken &token, R &&messages)
 Enqueues multiple messages in bulk using a producer token.
template<AsyncMessageTrait T>
AsyncMessageQueueProducerToken MakeProducerToken ()
 Creates a producer token for a specific message type.
template<AsyncMessageTrait T>
AsyncMessageQueueConsumerToken MakeConsumerToken ()
 Creates a consumer token for a specific message type.
void Swap (AsyncMessageQueue &other) noexcept
 Swaps the contents of this queue with another.
template<AsyncMessageTrait T>
bool IsRegistered () const noexcept
 Checks if an message type is registered.
bool HasMessages () const noexcept
 Checks if any registered type has messages.
template<AsyncMessageTrait T>
bool HasMessages () const noexcept
 Checks if messages of a specific type exist in the queue.
size_type TypeCount () const noexcept
 Gets the number of registered message types.
size_type MessageCount () const noexcept
 Gets the approximate total number of messages across all types.
template<AsyncMessageTrait T>
size_type MessageCount () const noexcept
 Gets the approximate number of messages for a specific type.
template<AsyncMessageTrait T>
auto TypedStorage () noexcept -> TypedAsyncMessageStorage< T > &
 Gets the typed storage for a specific message type.
template<AsyncMessageTrait T>
auto TypedStorage () const noexcept -> const TypedAsyncMessageStorage< T > &
 Gets the typed storage for a specific message type (const).

Friends

void swap (AsyncMessageQueue &lhs, AsyncMessageQueue &rhs) noexcept
 Swaps the contents of two AsyncMessageQueues.

Detailed Description

Async queue for managing multiple message types via lock-free concurrent queues.

Each registered async message type gets its own TypedAsyncMessageStorage backed by a moodycamel::ConcurrentQueue.

Note
Thread-safe.

Definition at line 323 of file async_queue.hpp.

Member Typedef Documentation

◆ size_type

Definition at line 325 of file async_queue.hpp.

Constructor & Destructor Documentation

◆ AsyncMessageQueue() [1/3]

helios::ecs::AsyncMessageQueue::AsyncMessageQueue ( )
default

◆ AsyncMessageQueue() [2/3]

helios::ecs::AsyncMessageQueue::AsyncMessageQueue ( const AsyncMessageQueue & )
delete

◆ AsyncMessageQueue() [3/3]

helios::ecs::AsyncMessageQueue::AsyncMessageQueue ( AsyncMessageQueue && )
defaultnoexcept

◆ ~AsyncMessageQueue()

helios::ecs::AsyncMessageQueue::~AsyncMessageQueue ( )
default

Member Function Documentation

◆ Clear() [1/2]

template<AsyncMessageTrait T>
void helios::ecs::AsyncMessageQueue::Clear ( )
inline

Clears messages of a specific type.

Template Parameters
TAsync message type

Definition at line 550 of file async_queue.hpp.

◆ Clear() [2/2]

void helios::ecs::AsyncMessageQueue::Clear ( )
inline

Clears all messages from the queue maintaining all registered types.

Definition at line 543 of file async_queue.hpp.

◆ Enqueue() [1/2]

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

Enqueues a single message using a producer token for improved throughput.

Warning
Triggers assertion if message type is not registered.
Template Parameters
TAsync message type
Parameters
tokenProducer token
messageMessage to enqueue

Definition at line 387 of file async_queue.hpp.

◆ Enqueue() [2/2]

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

Enqueues a single message into the queue.

Warning
Triggers assertion if message type is not registered.
Template Parameters
TAsync message type
Parameters
messageMessage to enqueue

Definition at line 374 of file async_queue.hpp.

◆ EnqueueBulk() [1/2]

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

Enqueues multiple messages in bulk using a producer token.

Warning
Triggers assertion if message type is not registered.
Template Parameters
RRange type whose value_type satisfies AsyncMessageTrait
Parameters
tokenProducer token
messagesRange of messages to enqueue

Definition at line 569 of file async_queue.hpp.

◆ EnqueueBulk() [2/2]

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

Enqueues multiple messages in bulk.

Warning
Triggers assertion if message type is not registered.
Template Parameters
RRange type whose value_type satisfies AsyncMessageTrait
Parameters
messagesRange of messages to enqueue

Definition at line 560 of file async_queue.hpp.

◆ HasMessages() [1/2]

template<AsyncMessageTrait T>
bool helios::ecs::AsyncMessageQueue::HasMessages ( ) const
inlinenodiscardnoexcept

Checks if messages of a specific type exist in the queue.

Template Parameters
TAsync message type
Returns
True if messages of type T exist, false otherwise or if the type is not registered

Definition at line 578 of file async_queue.hpp.

◆ HasMessages() [2/2]

bool helios::ecs::AsyncMessageQueue::HasMessages ( ) const
inlinenodiscardnoexcept

Checks if any registered type has messages.

Returns
True if at least one message exists across all types, false otherwise

Definition at line 466 of file async_queue.hpp.

◆ IsRegistered()

template<AsyncMessageTrait T>
bool helios::ecs::AsyncMessageQueue::IsRegistered ( ) const
inlinenodiscardnoexcept

Checks if an message type is registered.

Template Parameters
TAsync message type
Returns
True if the message type is registered, false otherwise

Definition at line 457 of file async_queue.hpp.

◆ MakeConsumerToken()

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

Creates a consumer token for a specific message type.

Warning
Triggers assertion if message type is not registered.
Template Parameters
TAsync message type
Returns
Consumer token

Definition at line 430 of file async_queue.hpp.

◆ MakeProducerToken()

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

Creates a producer token for a specific message type.

Warning
Triggers assertion if message type is not registered.
Template Parameters
TAsync message type
Returns
Producer token

Definition at line 419 of file async_queue.hpp.

◆ MessageCount() [1/2]

template<AsyncMessageTrait T>
auto helios::ecs::AsyncMessageQueue::MessageCount ( ) const -> size_type
inlinenodiscardnoexcept

Gets the approximate number of messages for a specific type.

Template Parameters
TAsync message type
Returns
Approximate message count or 0 if the type is not registered

Definition at line 595 of file async_queue.hpp.

◆ MessageCount() [2/2]

auto helios::ecs::AsyncMessageQueue::MessageCount ( ) const
inlinenodiscardnoexcept

Gets the approximate total number of messages across all types.

Returns
Approximate total message count

Definition at line 586 of file async_queue.hpp.

◆ operator=() [1/2]

AsyncMessageQueue & helios::ecs::AsyncMessageQueue::operator= ( AsyncMessageQueue && )
defaultnoexcept

◆ operator=() [2/2]

AsyncMessageQueue & helios::ecs::AsyncMessageQueue::operator= ( const AsyncMessageQueue & )
delete

◆ Register()

template<AsyncMessageTrait T>
void helios::ecs::AsyncMessageQueue::Register ( )
inline

Registers an async message type with the queue.

Template Parameters
TAsync message type

Definition at line 536 of file async_queue.hpp.

◆ Reset() [1/2]

template<AsyncMessageTrait T>
void helios::ecs::AsyncMessageQueue::Reset ( )
inlinenoexcept

Resets the queue by clearing and unregistering a specific message type.

Template Parameters
TAsync message type

Definition at line 363 of file async_queue.hpp.

◆ Reset() [2/2]

void helios::ecs::AsyncMessageQueue::Reset ( )
inlinenoexcept

Resets the queue by clearing all messages and unregistering all message types.

Definition at line 355 of file async_queue.hpp.

◆ Swap()

void helios::ecs::AsyncMessageQueue::Swap ( AsyncMessageQueue & other)
inlinenoexcept

Swaps the contents of this queue with another.

Parameters
otherAnother AsyncMessageQueue to swap with

Definition at line 438 of file async_queue.hpp.

◆ TypeCount()

size_type helios::ecs::AsyncMessageQueue::TypeCount ( ) const
inlinenodiscardnoexcept

Gets the number of registered message types.

Returns
Number of distinct message types

Definition at line 484 of file async_queue.hpp.

◆ TypedStorage() [1/2]

template<AsyncMessageTrait T>
auto helios::ecs::AsyncMessageQueue::TypedStorage ( ) const -> const TypedAsyncMessageStorage< T > &
inlinenodiscardnoexcept

Gets the typed storage for a specific message type (const).

Warning
Triggers assertion if type is not registered.
Template Parameters
TAsync message type
Returns
Const reference to the typed storage

Definition at line 614 of file async_queue.hpp.

◆ TypedStorage() [2/2]

template<AsyncMessageTrait T>
auto helios::ecs::AsyncMessageQueue::TypedStorage ( ) -> TypedAsyncMessageStorage< T > &
inlinenodiscardnoexcept

Gets the typed storage for a specific message type.

Warning
Triggers assertion if type is not registered.
Template Parameters
TAsync message type
Returns
Reference to the typed storage

Definition at line 605 of file async_queue.hpp.

◆ swap

void swap ( AsyncMessageQueue & lhs,
AsyncMessageQueue & rhs )
friend

Swaps the contents of two AsyncMessageQueues.

Parameters
lhsFirst AsyncMessageQueue
rhsSecond AsyncMessageQueue

Definition at line 447 of file async_queue.hpp.