1#ifndef MRS_LIB_CORO_EVENT_HPP_
2#define MRS_LIB_CORO_EVENT_HPP_
12#include "mrs_lib/coro/internal/continuation.hpp"
13#include "mrs_lib/coro/internal/immediate_awaitable.hpp"
16namespace mrs_lib::coro
31 std::pair<Event, EventAwaitable> make_event();
41 empty_awaitable_state,
47 static const char* get_msg(Type type);
71 struct StopCallbackCallable
124 Status status_ = Status::unset;
127 std::optional<std::stop_callback<StopCallbackCallable>> stop_callback_{};
141 explicit Awaiter(std::shared_ptr<internal::EventState> state,
bool token_cancellable, std::function<
void()> callback);
144 template <
typename T>
145 bool await_suspend(std::coroutine_handle<T> handle)
153 std::shared_ptr<internal::EventState> state_;
154 bool is_token_cancellable_ =
true;
155 std::function<void()> callback_;
158 enum class StopTokenBehavior
195 std::shared_ptr<internal::EventState> state_;
197 friend std::pair<Event, EventAwaitable> mrs_lib::coro::make_event();
203 LowLevelEventAwaitable get_low_level_event_awaitable(
EventAwaitable event_awaitable);
244 explicit Event(std::shared_ptr<internal::EventState> state);
246 std::shared_ptr<internal::EventState> state_;
248 friend std::pair<Event, EventAwaitable>
make_event();
Event awaitable that can be awaited by coroutines, resuming them once triggered.
Definition event.hpp:261
auto wait() &&-> internal::ImmediateAwaitable< internal::LowLevelEventAwaitable::Awaiter >
Wait for the event to trigger / cancel.
Definition event.cpp:241
Exception thrown on incorrect use of Event/EventAwaitable.
Definition event.hpp:37
Event that can be used to trigger coroutines.
Definition event.hpp:217
bool try_trigger()
Try triggering the event.
Definition event.cpp:211
friend std::pair< Event, EventAwaitable > make_event()
Create Event and its bound awaitable.
Definition event.cpp:17
bool try_cancel()
Try cancelling the event.
Definition event.cpp:221
Owning coroutine handle supporting cancellation.
Definition continuation.hpp:54
Internal class for handling events.
Definition event.hpp:59
bool try_cancel()
Try cancelling the event state.
Definition event.cpp:73
bool try_trigger()
Try triggering the event state.
Definition event.cpp:50
bool is_ready()
Check if the event was already triggered.
Definition event.cpp:128
bool add_continuation(CancellableContinuation continuation, bool token_cancelable, std::function< void()> callback)
Store or resume the continuation as target for this event.
Definition event.cpp:93
Internal awaitable used to wait for events.
Definition event.hpp:136
ImmediateAwaitable< Awaiter > get_awaitable() &&
Create awaitable for this event with default configuration.
Definition event.cpp:167