16 void add_event(
const std::shared_ptr<Event>& event,
const std::string&
name =
"");
24 bool remove_event(
const std::string&
name);
31 std::shared_ptr<Event> get_event(
const std::string&
name)
const;
36 std::vector<std::shared_ptr<Event>>
get_all_events()
const {
return m_events; }
48 bool cancel_event(
const std::shared_ptr<Event>& event);
55 bool cancel_event(
const std::string&
name);
64 template <
typename... Args>
67 if (
auto event = find_event_by_name(
name);
event &&
event->is_active()) {
68 event->update_params(std::forward<Args>(args)...);
84 if (
auto event = find_event_by_name(
name);
event &&
event->is_active()) {
85 return event->get_state<T>(state_key);
100 return [
this,
name, state_key]() -> T {
101 if (
auto value = get_event_state<T>(
name, state_key)) {
112 uint64_t get_next_event_id()
const;
118 bool has_active_events()
const;
124 std::vector<std::string> get_event_names()
const;
132 void terminate_all_events();
140 std::string auto_generate_name(
const std::shared_ptr<Event>& event)
const;
147 std::shared_ptr<Event> find_event_by_name(
const std::string&
name);
154 std::shared_ptr<Event> find_event_by_name(
const std::string&
name)
const;
159 void cleanup_completed_events();
164 mutable std::atomic<uint64_t> m_next_event_id { 1 };