30 #ifndef GUM_SIGNALER0_H 31 #define GUM_SIGNALER0_H 34 #include <agrum/agrum.h> 35 #include <agrum/tools/core/list.h> 36 #include <agrum/tools/core/signal/signaler.h> 40 #ifndef DOXYGEN_SHOULD_SKIP_THIS 46 virtual ~IConnector0(){};
48 virtual Listener* target()
const = 0;
49 virtual void notify(
const void*) = 0;
50 virtual IConnector0* clone() = 0;
51 virtual IConnector0* duplicate(Listener* target) = 0;
54 class BasicSignaler0:
public ISignaler {
56 typedef std::vector< IConnector0* > ConnectorList;
60 BasicSignaler0(
const BasicSignaler0& s);
63 virtual ~BasicSignaler0();
67 void detach(Listener* target);
70 friend class Listener;
72 void detachFromTarget_(Listener* target);
74 void duplicateTarget_(
const Listener* oldtarget, Listener* newtarget);
76 ConnectorList connectors_;
79 std::function<
bool(IConnector0* el) > _find_target_(
const gum::Listener* l);
82 template <
class TargetClass >
83 class Connector0:
public IConnector0 {
87 Connector0(TargetClass* target,
void (TargetClass::*action)(
const void*));
89 Connector0(
const Connector0< TargetClass >* src);
91 virtual ~Connector0();
93 virtual IConnector0* clone();
95 virtual IConnector0* duplicate(Listener* target);
97 virtual void notify(
const void* src);
99 virtual Listener* target()
const;
102 TargetClass* _target_;
103 void (TargetClass::*_action_)(
const void*);
120 GUM_CONSTRUCTOR(Signaler0);
127 GUM_DESTRUCTOR(Signaler0);
131 template <
class TargetClass >
132 void attach(TargetClass* target,
void (TargetClass::*action)(
const void*)) {
133 __sig__::Connector0< TargetClass >* conn
134 =
new __sig__::Connector0< TargetClass >(target, action);
135 this->connectors_.push_back(conn);
136 target->_attachSignal_(
this);
149 #define GUM_EMIT0(signal) this->signal(this) 152 #include <agrum/tools/core/signal/signaler0_tpl.h> 154 #ifndef GUM_NO_INLINE 155 # include <agrum/tools/core/signal/signaler0_inl.h> Internal namespace for aGrUM signaler/listener components.
INLINE void emplace(Args &&... args)
void attach(TargetClass *target, void(TargetClass::*action)(const void *))
Signaler0(const Signaler0 &s)
INLINE void operator()(const void *src)