aGrUM 3.0.0
a C++ library for (probabilistic) graphical models
gum::__sig__::BasicSignaler< Args > Class Template Reference

Base class for signalers, managing connector lifecycle. More...

#include <signaler.h>

Inherits ISignaler.

Public Member Functions

 ~BasicSignaler () override
 Destructor: detaches from all targets and deletes connectors.
bool hasListener () override
void detach (Listener *target)
 Detach a specific listener from this signaler.

Protected Types

using ConnectorList = std::vector< IConnector< Args... >* >

Protected Member Functions

 BasicSignaler ()
 Default constructor.
 BasicSignaler (const BasicSignaler &other)
 Copy constructor: duplicates all connectors and re-attaches to targets.
void detachFromTarget (Listener *target) override
 Called by Listener to detach when the listener is destroyed.
void duplicateTarget (const Listener *oldTarget, Listener *newTarget) override
 Called by Listener copy constructor to duplicate connections.

Protected Attributes

ConnectorList _connectors_

Friends

class gum::Listener

Detailed Description

template<typename... Args>
class gum::__sig__::BasicSignaler< Args >

Base class for signalers, managing connector lifecycle.

Template Parameters
ArgsThe types of arguments passed when the signal is emitted.

Definition at line 163 of file signaler.h.

Member Typedef Documentation

◆ ConnectorList

template<typename... Args>
using gum::__sig__::BasicSignaler< Args >::ConnectorList = std::vector< IConnector< Args... >* >
protected

Definition at line 165 of file signaler.h.

Constructor & Destructor Documentation

◆ BasicSignaler() [1/2]

template<typename... Args>
gum::__sig__::BasicSignaler< Args >::BasicSignaler ( )
inlineprotected

Default constructor.

Definition at line 168 of file signaler.h.

Base class for signalers, managing connector lifecycle.
Definition signaler.h:163
BasicSignaler()
Default constructor.
Definition signaler.h:168

References BasicSignaler().

Referenced by BasicSignaler(), BasicSignaler(), and ~BasicSignaler().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BasicSignaler() [2/2]

template<typename... Args>
gum::__sig__::BasicSignaler< Args >::BasicSignaler ( const BasicSignaler< Args > & other)
protected

Copy constructor: duplicates all connectors and re-attaches to targets.

Definition at line 89 of file signaler_tpl.h.

89 : ISignaler() {
91 for (const auto* connector: other._connectors_) {
92 auto* cloned = connector->clone();
93 _connectors_.push_back(cloned);
94 cloned->target()->_attachSignal_(this);
95 }
96 }
ConnectorList _connectors_
Definition signaler.h:192

References BasicSignaler(), and _connectors_.

Here is the call graph for this function:

◆ ~BasicSignaler()

template<typename... Args>
gum::__sig__::BasicSignaler< Args >::~BasicSignaler ( )
override

Destructor: detaches from all targets and deletes connectors.

Definition at line 99 of file signaler_tpl.h.

99 {
101 for (auto* connector: _connectors_) {
102 connector->target()->_detachSignal_(this);
103 delete connector;
104 }
105 _connectors_.clear();
106 }

References BasicSignaler(), and _connectors_.

Here is the call graph for this function:

Member Function Documentation

◆ detach()

template<typename... Args>
void gum::__sig__::BasicSignaler< Args >::detach ( Listener * target)

Detach a specific listener from this signaler.

Definition at line 114 of file signaler_tpl.h.

114 {
115 for (auto it = _connectors_.rbegin(); it != _connectors_.rend(); ++it) {
116 if ((*it)->target() == target) {
117 auto* conn = *it;
118 _connectors_.erase(std::next(it).base());
119 target->_detachSignal_(this);
120 delete conn;
121 return;
122 }
123 }
124 }

References _connectors_, gum::Listener::_detachSignal_(), and gum::Listener.

Here is the call graph for this function:

◆ detachFromTarget()

template<typename... Args>
void gum::__sig__::BasicSignaler< Args >::detachFromTarget ( Listener * target)
overrideprotected

Called by Listener to detach when the listener is destroyed.

Definition at line 127 of file signaler_tpl.h.

127 {
128 for (auto it = _connectors_.begin(); it != _connectors_.end();) {
129 if ((*it)->target() == target) {
130 delete *it;
131 it = _connectors_.erase(it);
132 } else {
133 ++it;
134 }
135 }
136 }

References _connectors_, and gum::Listener.

Here is the call graph for this function:

◆ duplicateTarget()

template<typename... Args>
void gum::__sig__::BasicSignaler< Args >::duplicateTarget ( const Listener * oldTarget,
Listener * newTarget )
overrideprotected

Called by Listener copy constructor to duplicate connections.

Definition at line 139 of file signaler_tpl.h.

139 {
141 for (auto* connector: _connectors_) {
142 if (connector->target() == oldTarget) { toAdd.push_back(connector->duplicate(newTarget)); }
143 }
144 for (auto* newConn: toAdd) {
145 _connectors_.push_back(newConn);
146 }
147 }
std::vector< IConnector< Args... > * > ConnectorList
Definition signaler.h:165

References _connectors_, and gum::Listener.

Here is the call graph for this function:

◆ hasListener()

template<typename... Args>
bool gum::__sig__::BasicSignaler< Args >::hasListener ( )
override
Returns
true if at least one listener is attached.

Definition at line 109 of file signaler_tpl.h.

109 {
110 return !_connectors_.empty();
111 }

References _connectors_.

◆ gum::Listener

template<typename... Args>
friend class gum::Listener
friend

Definition at line 184 of file signaler.h.

References gum::Listener.

Referenced by detach(), detachFromTarget(), duplicateTarget(), and gum::Listener.

Member Data Documentation

◆ _connectors_

template<typename... Args>
ConnectorList gum::__sig__::BasicSignaler< Args >::_connectors_
protected

The documentation for this class was generated from the following files: