92 template <
typename... Args >
101 virtual void notify(
const void* src, Args... args) = 0;
119 template <
class TargetClass,
typename... Args >
123 using ActionType = void (TargetClass::*)(
const void*, Args...);
141 void notify(
const void* src, Args... args)
override;
162 template <
typename... Args >
235 template <
typename... Args >
253 template <
class TargetClass >
254 void attach(TargetClass* target,
void (TargetClass::*action)(
const void*, Args...));
282#define GUM_EMIT0(signal) (signal)(this)
286#define GUM_EMIT_ARGS(signal, ...) (signal)(this, __VA_ARGS__)
289#define GUM_EMIT1(signal, arg1) GUM_EMIT_ARGS(signal, arg1)
290#define GUM_EMIT2(signal, arg1, arg2) GUM_EMIT_ARGS(signal, arg1, arg2)
291#define GUM_EMIT3(signal, arg1, arg2, arg3) GUM_EMIT_ARGS(signal, arg1, arg2, arg3)
292#define GUM_EMIT4(signal, arg1, arg2, arg3, arg4) GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4)
293#define GUM_EMIT5(signal, arg1, arg2, arg3, arg4, arg5) \
294 GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5)
295#define GUM_EMIT6(signal, arg1, arg2, arg3, arg4, arg5, arg6) \
296 GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5, arg6)
297#define GUM_EMIT7(signal, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
298 GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
301#define GUM_CONNECT(sender, signal, receiver, target) (sender).signal.attach(&(receiver), &target)
Every class who would catch signal from signaler should derive from Listener.
Signaler(const Signaler &other)
Copy constructor.
Signaler()
Default constructor.
void attach(TargetClass *target, void(TargetClass::*action)(const void *, Args...))
Attach a listener with a member function callback.
void operator()(const void *src, Args... args)
Emit the signal, notifying all attached listeners.
~Signaler() override
Destructor.
Base class for signalers, managing connector lifecycle.
std::vector< IConnector< Args... > * > ConnectorList
void duplicateTarget(const Listener *oldTarget, Listener *newTarget) override
Called by Listener copy constructor to duplicate connections.
BasicSignaler()
Default constructor.
friend class gum::Listener
~BasicSignaler() override
Destructor: detaches from all targets and deletes connectors.
void detachFromTarget(Listener *target) override
Called by Listener to detach when the listener is destroyed.
ConnectorList _connectors_
void detach(Listener *target)
Detach a specific listener from this signaler.
bool hasListener() override
Concrete connector binding a target object and its member function.
void(TargetClass::*)(const void *, Args...) ActionType
Type alias for the member function pointer.
Listener * target() const override
IConnector< Args... > * duplicate(Listener *newTarget) const override
Create a duplicate connector pointing to a new target.
void notify(const void *src, Args... args) override
Notify the target with the given source and arguments.
~Connector() override
Destructor.
Connector()
Default constructor.
IConnector< Args... > * clone() const override
Create a deep copy of this connector.
Abstract interface for signal connectors with variadic arguments.
virtual void notify(const void *src, Args... args)=0
Notify the target with the given source and arguments.
virtual IConnector< Args... > * duplicate(Listener *newTarget) const =0
Create a duplicate connector pointing to a new target.
virtual ~IConnector()=default
virtual Listener * target() const =0
virtual IConnector< Args... > * clone() const =0
Create a deep copy of this connector.
Internal namespace for aGrUM signaler/listener components.
gum is the global namespace for all aGrUM entities
Signaler<> Signaler0
Signaler with no arguments.