8 #include "Arp/System/Core/delegate.hxx"
9 #include "Arp/System/Core/slim_delegate.hxx"
10 #include "Arp/System/Core/Exception.hpp"
11 #include <forward_list>
31 template<
class ...TEventArgs>
68 throw Exception(
"As argument passed delegate is not valid.");
71 this->slimEventHandlers.push_front(std::move(rhs));
83 throw Exception(
"As argument passed delegate is not valid.");
86 this->slimEventHandlers.push_front(rhs);
95 this->slimEventHandlers.remove(rhs);
106 throw Exception(
"As argument passed delegate is not valid.");
110 throw Exception(
"Lambda delegates are not supported by events.");
113 this->eventHandlers.push_front(std::move(rhs));
124 throw Exception(
"As argument passed delegate is not valid.");
128 throw Exception(
"Lambda delegates are not supported by events.");
131 this->eventHandlers.push_front(rhs);
140 this->eventHandlers.remove(rhs);
153 slimEventHandler(args...);
158 eventHandler(args...);
167 return this->slimEventHandlers.empty() && this->eventHandlers.empty();
171 std::forward_list<slim_delegate_type> slimEventHandlers;
172 std::forward_list<delegate_type> eventHandlers;
228 throw Exception(
"As argument passed delegate is not valid.");
231 this->slimEventHandlers.push_front(std::move(rhs));
242 throw Exception(
"As argument passed delegate is not valid.");
245 this->slimEventHandlers.push_front(rhs);
254 this->slimEventHandlers.remove(rhs);
265 throw Exception(
"As argument passed delegate is not valid.");
269 throw Exception(
"Lambda delegates are not supported by events.");
272 this->eventHandlers.push_front(std::move(rhs));
283 throw Exception(
"As argument passed delegate is not valid.");
287 throw Exception(
"Lambda delegates are not supported by events.");
290 this->eventHandlers.push_front(rhs);
299 this->eventHandlers.remove(rhs);
313 for (
const delegate_type& eventHandler : this->eventHandlers)
325 return this->slimEventHandlers.empty() && this->eventHandlers.empty();
329 std::forward_list<slim_delegate_type> slimEventHandlers;
330 std::forward_list<delegate_type> eventHandlers;
This is the base class of all Arp exception classes.
Definition: Exception.hpp:16
event & operator+=(const slim_delegate_type &rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:238
event & operator=(const event &arg)=default
The default assignment operator.
event & operator+=(const delegate_type &rhs)
Adds a delegate to this event.
Definition: event.hxx:279
event(void)=default
Constructs a event instance.
event & operator-=(const slim_delegate_type &rhs)
Removes a slim_delegate from this event.
Definition: event.hxx:252
event & operator=(event &&arg)=default
The move assignment operator.
event & operator+=(slim_delegate_type &&rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:224
event(const event &arg)=default
Constructs a event instance.
event & operator-=(const delegate_type &rhs)
Removes a delegate from this event.
Definition: event.hxx:297
~event(void)=default
Destructs this instance..
event(event &&arg)=default
Constructs a event instance.
void operator()(void) const
Fires this event instance.
Definition: event.hxx:306
delegate< void()> delegate_type
The delegate type of this event.
Definition: event.hxx:196
bool is_empty(void) const
Checks if this event has any delegates to be invoked.
Definition: event.hxx:323
event & operator+=(delegate_type &&rhs)
Adds a delegate to this event.
Definition: event.hxx:261
Use this class to register and invoke several delegates (function pointer in OOP design).
Definition: event.hxx:33
void operator()(TEventArgs... args) const
Fires this event instance.
Definition: event.hxx:148
event & operator-=(const slim_delegate_type &rhs)
Removes a slim_delegate from this event.
Definition: event.hxx:93
event & operator+=(const delegate_type &rhs)
Adds a delegate to this event.
Definition: event.hxx:120
~event(void)=default
Destructs this instance..
event & operator-=(const delegate_type &rhs)
Removes a delegate from this event.
Definition: event.hxx:138
delegate< void(TEventArgs...)> delegate_type
The delegate type of this event.
Definition: event.hxx:36
event & operator+=(delegate_type &&rhs)
Adds a delegate to this event.
Definition: event.hxx:102
event & operator=(event &&arg) noexcept=default
The move assignment operator.
event(const event &arg)=default
Constructs a event instance.
bool is_empty(void) const
Checks if this event has any delegates to be invoked.
Definition: event.hxx:165
event(void)=default
Constructs a event instance.
event & operator+=(slim_delegate_type &&rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:64
event & operator=(const event &arg)=default
The default assignment operator.
event & operator+=(const slim_delegate_type &rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:79
event(event &&arg) noexcept=default
Constructs a event instance.
Definition: slim_delegate.hxx:12
Root namespace for the PLCnext API