46 template <DerivedEventArgs T>
60 std::lock_guard<std::mutex> lock{ e.m_mutex };
61 m_handlers = e.m_handlers;
69 std::lock_guard<std::mutex> lock{ e.m_mutex };
70 m_handlers = std::move(e.m_handlers);
79 std::lock_guard<std::mutex> lock{ m_mutex };
80 return m_handlers.size();
89 std::lock_guard<std::mutex> lock{ m_mutex };
90 m_handlers.push_back(handler);
91 return HandlerId{ m_handlers.size() - 1 };
99 std::lock_guard<std::mutex> lock{ m_mutex };
100 if (
static_cast<size_t>(
id) < 0 ||
static_cast<size_t>(
id) >= m_handlers.size())
104 m_handlers.erase(m_handlers.begin() +
static_cast<size_t>(
id));
110 void invoke(
const T& param)
const noexcept
112 std::lock_guard<std::mutex> lock{ m_mutex };
113 for (
const std::function<
void(
const T&)>& handler : m_handlers)
155 std::lock_guard<std::mutex> lock{ m_mutex };
156 std::lock_guard<std::mutex> lock2{ e.m_mutex };
157 m_handlers = e.m_handlers;
170 std::lock_guard<std::mutex> lock{ m_mutex };
171 std::lock_guard<std::mutex> lock2{ e.m_mutex };
172 m_handlers = std::move(e.m_handlers);
173 e.m_handlers.clear();
181 operator bool() const noexcept
187 mutable std::mutex m_mutex;
188 std::vector<std::function<void(
const T&)>> m_handlers;
void operator-=(HandlerId id) noexcept
Unsubscribes a handler from the event.
Definition event.h:134
Event(Event &&e) noexcept
Constructs an Event via move.
Definition event.h:67
HandlerId operator+=(const std::function< void(const T &)> &handler) noexcept
Subscribes a handler to the event.
Definition event.h:126
void invoke(const T ¶m) const noexcept
Invokes the event, calling all handlers.
Definition event.h:110
Event & operator=(const Event &e) noexcept
Copies an Event.
Definition event.h:151
void unsubscribe(HandlerId id) noexcept
Unsubscribes a handler from the event.
Definition event.h:97
Event & operator=(Event &&e) noexcept
Moves an Event.
Definition event.h:166
size_t count() const noexcept
Gets the number of handlers subscribed to the event.
Definition event.h:77
Event() noexcept=default
Constructs an Event.
HandlerId subscribe(const std::function< void(const T &)> &handler) noexcept
Subscribes a handler to the event.
Definition event.h:87
void operator()(const T ¶m) noexcept
Invokes the event, calling all handlers.
Definition event.h:142
HandlerId
The ID of a handler for an event.
Definition event.h:40