20template <
typename EventVariant = DefaultEvents>
22 using PostFn = void (*)(
void* sinkPtr, EventVariant&& event,
EventPriority priority);
34 template <typename ConcreteSink>
35 requires (!std::is_same_v<std::decay_t<ConcreteSink>,
BasicEventSink>)
38 _postFn([](
void* ptr, EventVariant&& evt,
EventPriority prio) {
39 static_cast<ConcreteSink*
>(ptr)->
post(std::move(evt), prio);
46 if (_postFn && _sinkPtr) {
47 _postFn(_sinkPtr, std::move(event), priority);
54 if (_postFn && _sinkPtr) {
55 EventVariant copy = event;
56 _postFn(_sinkPtr, std::move(copy), priority);
61 template <
typename Event>
67 explicit operator bool() const noexcept
69 return _sinkPtr !=
nullptr && _postFn !=
nullptr;
73 void* _sinkPtr =
nullptr;
74 PostFn _postFn =
nullptr;
81template <
typename EventVariant = DefaultEvents>
Standard lifecycle events (QuitEvent, ErrorEvent, TimerEvent).
Bounded and multi-tier priority MPSC queueing policies.
Non-virtual type-erased event sink handle (raw pointer + static function pointer)....
Definition EventSink.hpp:21
BasicEventSink(BasicEventSink &&) noexcept=default
void post(EventVariant &&event, EventPriority priority=EventPriority::Normal) const
Post an event into the event sink with priority (rvalue overload).
Definition EventSink.hpp:44
void postHighPriority(Event &&event) const
Convenience helper for posting high-priority events (e.g. from ISR handlers).
Definition EventSink.hpp:62
void post(const EventVariant &event, EventPriority priority=EventPriority::Normal) const
Post an event into the event sink with priority (const lvalue overload).
Definition EventSink.hpp:52
BasicEventSink & operator=(const BasicEventSink &)=default
BasicEventSink(const BasicEventSink &)=default
EventVariant EventVariantType
Definition EventSink.hpp:25
Definition Application.hpp:16
EventPriority
Event priority levels for multi-priority queue policies.
Definition QueuePolicies.hpp:32
DefaultEvents Event
Alias for DefaultEvents.
Definition Events.hpp:65