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>
42 event(
void) =
default;
68 throw Exception(
"As argument passed delegate is not valid.");
71 this->slimEventHandlers.push_front(std::forward<slim_delegate_type>(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::forward<delegate_type>(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;
202 event(
void) =
default;
228 throw Exception(
"As argument passed delegate is not valid.");
231 this->slimEventHandlers.push_front(std::forward<slim_delegate_type>(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::forward<delegate_type>(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;
delegate< void(TEventArgs...)> delegate_type
The delegate type of this event.
Definition: event.hxx:36
event & operator+=(const slim_delegate_type &rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:79
event & operator+=(const delegate_type &rhs)
Adds a delegate to this event.
Definition: event.hxx:279
event & operator+=(const delegate_type &rhs)
Adds a delegate to this event.
Definition: event.hxx:120
delegate< void()> delegate_type
The delegate type of this event.
Definition: event.hxx:196
~event(void)=default
Destructs this instance..
event & operator=(const event &arg)=default
The default assignment operator.
void operator()(TEventArgs... args) const
Fires this event instance.
Definition: event.hxx:148
event & operator+=(const slim_delegate_type &rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:238
event(void)=default
Constructs a event instance.
event & operator-=(const delegate_type &rhs)
Removes a delegate from this event.
Definition: event.hxx:297
Use this class to register and invoke several delegates (function pointer in OOP design).
Definition: event.hxx:32
void operator()(void) const
Fires this event instance.
Definition: event.hxx:306
Root namespace for the PLCnext API
event & operator+=(slim_delegate_type &&rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:64
event & operator-=(const delegate_type &rhs)
Removes a delegate from this event.
Definition: event.hxx:138
event & operator+=(delegate_type &&rhs)
Adds a delegate to this event.
Definition: event.hxx:102
This is the base class of all Arp exception classes.
Definition: Exception.hpp:15
event & operator-=(const slim_delegate_type &rhs)
Removes a slim_delegate from this event.
Definition: event.hxx:252
event & operator+=(delegate_type &&rhs)
Adds a delegate to this event.
Definition: event.hxx:261
event & operator+=(slim_delegate_type &&rhs)
Adds a slim_delegate to this event.
Definition: event.hxx:224
bool is_empty(void) const
Checks if this event has any delegates to be invoked.
Definition: event.hxx:323
Definition: slim_delegate.hxx:12
event & operator-=(const slim_delegate_type &rhs)
Removes a slim_delegate from this event.
Definition: event.hxx:93
bool is_empty(void) const
Checks if this event has any delegates to be invoked.
Definition: event.hxx:165