50#ifndef GUM_SIGNALER0_H
51#define GUM_SIGNALER0_H
61#ifndef DOXYGEN_SHOULD_SKIP_THIS
67 virtual ~IConnector0() {};
69 virtual Listener* target()
const = 0;
70 virtual void notify(
const void*) = 0;
71 virtual IConnector0* clone() = 0;
72 virtual IConnector0* duplicate(Listener* target) = 0;
75 class BasicSignaler0:
public ISignaler {
77 using ConnectorList = std::vector< IConnector0* >;
81 BasicSignaler0(
const BasicSignaler0& s);
84 virtual ~BasicSignaler0();
88 void detach(Listener* target);
91 friend class Listener;
93 void detachFromTarget_(Listener* target);
95 void duplicateTarget_(
const Listener* oldtarget, Listener* newtarget);
97 ConnectorList connectors_;
100 std::function< bool(IConnector0* el) > _find_target_(
const gum::Listener* l);
103 template <
class TargetClass >
104 class Connector0:
public IConnector0 {
108 Connector0(TargetClass* target,
void (TargetClass::*action)(
const void*));
110 Connector0(
const Connector0< TargetClass >* src);
112 virtual ~Connector0();
114 virtual IConnector0* clone();
116 virtual IConnector0* duplicate(Listener* target);
118 virtual void notify(
const void* src);
120 virtual Listener* target()
const;
123 TargetClass* _target_;
124 void (TargetClass::*_action_)(
const void*);
152 template <
class TargetClass >
153 void attach(TargetClass* target,
void (TargetClass::*action)(
const void*)) {
154 __sig__::Connector0< TargetClass >* conn
155 =
new __sig__::Connector0< TargetClass >(target, action);
156 this->connectors_.push_back(conn);
157 target->_attachSignal_(
this);
161 for (
const auto el: connectors_) {
170#define GUM_EMIT0(signal) this->signal(this)
INLINE void operator()(const void *src)
Signaler0(const Signaler0 &s)
void attach(TargetClass *target, void(TargetClass::*action)(const void *))
Generic class for manipulating lists.
Internal namespace for aGrUM signaler/listener components.
gum is the global namespace for all aGrUM entities