aGrUM  0.16.0
signaler0_inl.h
Go to the documentation of this file.
1 
31 // To help IDE parsers
33 
34 namespace gum {
35 
36 #ifndef DOXYGEN_SHOULD_SKIP_THIS
37  namespace __sig__ {
38 
39  INLINE
40  bool BasicSignaler0::hasListener() { return (!(_connectors.empty())); }
41 
42  INLINE
43  void BasicSignaler0::detach(Listener* target) {
44  auto it = std::find_if(
45  _connectors.begin(), _connectors.end(), __find_target(target));
46 
47  while (it != _connectors.end()) {
48  delete *it;
49  target->detachSignal__(this);
50 
51  it = _connectors.erase(it); // it is the next one
52  it = std::find_if(it, _connectors.end(), __find_target(target));
53  }
54  }
55 
56  INLINE
57  void BasicSignaler0::_detachFromTarget(Listener* target) {
58  auto it = std::find_if(
59  _connectors.begin(), _connectors.end(), __find_target(target));
60 
61  while (it != _connectors.end()) {
62  delete *it;
63 
64  it = _connectors.erase(it); // it is the next one
65  it = std::find_if(it, _connectors.end(), __find_target(target));
66  }
67  }
68 
69  INLINE
70  void BasicSignaler0::_duplicateTarget(const Listener* oldtarget,
71  Listener* newtarget) {
72  auto it = std::find_if(
73  _connectors.begin(), _connectors.end(), __find_target(oldtarget));
74 
75  while (it != _connectors.end()) {
76  _connectors.push_back((*it)->duplicate(newtarget));
77 
78  it++;
79  it = std::find_if(it, _connectors.end(), __find_target(oldtarget));
80  }
81  }
82 
83  INLINE
84  std::function< bool(IConnector0* el) >
85  BasicSignaler0::__find_target(const gum::Listener* l) {
86  return [=](IConnector0* el) -> bool { return el->target() == l; };
87  }
88 
89  } // namespace __sig__
90 #endif
91 
92 } // namespace gum
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Every class who would catch signal from signaler should derive from Listener.
Definition: listener.h:74