Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy > Class Template Reference

Policy-configurable non-virtual event bus implementation. More...

#include <EventBus.hpp>

+ Inheritance diagram for corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >:
+ Collaboration diagram for corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >:

Public Types

using EventVariant = EventVariantType
 
using ProfilerPolicyType = ProfilerPolicy
 
using ReactorType = BasicReactor< EventVariant, StoragePolicy >
 

Public Member Functions

 BasicEventBus ()=default
 
std::size_t drain ()
 Drain and dispatch all currently enqueued events.
 
bool empty () const
 Check if event queue is empty.
 
const OverflowPolicy & overflowPolicy () const noexcept
 Access const reference to overflow policy.
 
OverflowPolicy & overflowPolicy () noexcept
 Access reference to overflow policy.
 
void post (const EventVariant &event, EventPriority priority=EventPriority::Normal)
 Post an event into the queue with optional priority (const lvalue overload).
 
void post (EventVariant &&event, EventPriority priority=EventPriority::Normal)
 Post an event into the queue with optional priority (rvalue overload).
 
template<typename Event >
void postHighPriority (Event &&event)
 Convenience helper for posting high-priority events.
 
std::size_t processBatch (std::size_t maxBatch)
 Process up to maxBatch events consecutively from the queue.
 
bool processOne ()
 Process a single event from the queue.
 
const ProfilerPolicy & profiler () const noexcept
 Access const reference to profiler policy.
 
ProfilerPolicy & profiler () noexcept
 Access reference to profiler policy.
 
ReactorTypereactor () noexcept
 Access reference to reactor.
 
template<typename EventType , typename Handler >
bool registerHandler (Handler &&handler)
 Register an event handler with explicit event type parameter.
 
template<typename Handler >
bool registerHandler (Handler &&handler)
 Register an event handler with automatic event type deduction.
 
void seal ()
 Seal reactor handlers.
 
void setOnQueueNonEmpty (StaticCallback callback)
 Set static callback for event availability when queue transitions to non-empty.
 
const SignalPolicy & signalPolicy () const noexcept
 Access const reference to signal policy.
 
SignalPolicy & signalPolicy () noexcept
 Access reference to signal policy.
 
EventSinkT< EventVariantsink () noexcept
 Get an EventSink handle pointing to this event bus.
 

Detailed Description

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
class corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >

Policy-configurable non-virtual event bus implementation.

Template Parameters
EventVariantTypeThe variant type list of supported events.
QueuePolicyStrategy for queueing events (bounded lock-free MPSC).
SignalPolicyStrategy for signaling (NoSignalPolicy by default).
StoragePolicyStrategy for compile-time handler capacity and delegate storage.
OverflowPolicyStrategy for queue overflow handling.
ProfilerPolicyStrategy for latency telemetry and trace recording (NullProfiler by default).

Member Typedef Documentation

◆ EventVariant

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
using corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::EventVariant = EventVariantType

◆ ProfilerPolicyType

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
using corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::ProfilerPolicyType = ProfilerPolicy

◆ ReactorType

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
using corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::ReactorType = BasicReactor<EventVariant, StoragePolicy>

Constructor & Destructor Documentation

◆ BasicEventBus()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::BasicEventBus ( )
default

Member Function Documentation

◆ drain()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
std::size_t corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::drain ( )
inline

Drain and dispatch all currently enqueued events.

Returns
Total number of events processed.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ empty()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
bool corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::empty ( ) const
inline

Check if event queue is empty.

+ Here is the caller graph for this function:

◆ overflowPolicy() [1/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
const OverflowPolicy & corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::overflowPolicy ( ) const
inlinenoexcept

Access const reference to overflow policy.

◆ overflowPolicy() [2/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
OverflowPolicy & corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::overflowPolicy ( )
inlinenoexcept

Access reference to overflow policy.

+ Here is the caller graph for this function:

◆ post() [1/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
void corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::post ( const EventVariant event,
EventPriority  priority = EventPriority::Normal 
)
inline

Post an event into the queue with optional priority (const lvalue overload).

Parameters
eventConst reference to event variant instance.
priorityPriority tier (EventPriority::High, Normal, Low).
Note
Thread-safe, lock-free, zero heap allocation.

◆ post() [2/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
void corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::post ( EventVariant &&  event,
EventPriority  priority = EventPriority::Normal 
)
inline

Post an event into the queue with optional priority (rvalue overload).

Parameters
eventMovable event variant instance.
priorityPriority tier (EventPriority::High, Normal, Low).
Note
Thread-safe, lock-free, zero heap allocation.
See also
EventSinkT for non-owning posting handle.
+ Here is the caller graph for this function:

◆ postHighPriority()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
template<typename Event >
void corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::postHighPriority ( Event &&  event)
inline

Convenience helper for posting high-priority events.

Template Parameters
EventConcrete event type convertible to EventVariant.
Parameters
eventEvent payload to forward at EventPriority::High.
Note
Guaranteed to be dispatched ahead of standard Normal/Low priority events.
+ Here is the call graph for this function:

◆ processBatch()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
std::size_t corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::processBatch ( std::size_t  maxBatch)
inline

Process up to maxBatch events consecutively from the queue.

Parameters
maxBatchMaximum number of events to process in this batch.
Returns
Number of events successfully popped and dispatched.
+ Here is the caller graph for this function:

◆ processOne()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
bool corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::processOne ( )
inline

Process a single event from the queue.

Returns
true if an event was popped and dispatched; false if queue was empty.
+ Here is the caller graph for this function:

◆ profiler() [1/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
const ProfilerPolicy & corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::profiler ( ) const
inlinenoexcept

Access const reference to profiler policy.

◆ profiler() [2/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
ProfilerPolicy & corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::profiler ( )
inlinenoexcept

Access reference to profiler policy.

+ Here is the caller graph for this function:

◆ reactor()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
ReactorType & corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::reactor ( )
inlinenoexcept

Access reference to reactor.

◆ registerHandler() [1/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
template<typename EventType , typename Handler >
bool corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::registerHandler ( Handler &&  handler)
inline

Register an event handler with explicit event type parameter.

Template Parameters
EventTypeEvent type to handle.
HandlerCallable handler type.
Parameters
handlerCallback to invoke when event occurs.
+ Here is the caller graph for this function:

◆ registerHandler() [2/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
template<typename Handler >
bool corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::registerHandler ( Handler &&  handler)
inline

Register an event handler with automatic event type deduction.

Template Parameters
HandlerCallable handler type (lambda, function pointer, or functor).
Parameters
handlerCallback to invoke when event occurs.

◆ seal()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
void corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::seal ( )
inline

Seal reactor handlers.

+ Here is the caller graph for this function:

◆ setOnQueueNonEmpty()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
void corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::setOnQueueNonEmpty ( StaticCallback  callback)
inline

Set static callback for event availability when queue transitions to non-empty.

+ Here is the caller graph for this function:

◆ signalPolicy() [1/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
const SignalPolicy & corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::signalPolicy ( ) const
inlinenoexcept

Access const reference to signal policy.

◆ signalPolicy() [2/2]

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
SignalPolicy & corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::signalPolicy ( )
inlinenoexcept

Access reference to signal policy.

+ Here is the caller graph for this function:

◆ sink()

template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = NoSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy, typename ProfilerPolicy = profiler::NullProfiler>
EventSinkT< EventVariant > corium::BasicEventBus< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy, ProfilerPolicy >::sink ( )
inlinenoexcept

Get an EventSink handle pointing to this event bus.

+ Here is the caller graph for this function:

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