aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
signaler.h File Reference

C++20 variadic template implementation of the Signaler/Listener pattern. More...

#include <algorithm>
#include <functional>
#include <vector>
#include <agrum/agrum.h>
#include <agrum/base/core/signal/listener.h>
#include <agrum/base/core/signal/signaler_tpl.h>
Include dependency graph for signaler.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  gum::__sig__::IConnector< Args >
 Abstract interface for signal connectors with variadic arguments. More...
class  gum::__sig__::Connector< TargetClass, Args >
 Concrete connector binding a target object and its member function. More...
class  gum::__sig__::BasicSignaler< Args >
 Base class for signalers, managing connector lifecycle. More...
class  gum::Signaler< Args >
 Variadic template signaler for any number of arguments. More...

Namespaces

namespace  gum
 gum is the global namespace for all aGrUM entities
namespace  gum::__sig__
 Internal namespace for aGrUM signaler/listener components.

Macros

#define GUM_EMIT0(signal)
 Emit a signal with no additional arguments.
#define GUM_EMIT_ARGS(signal, ...)
 Emit a signal with variadic arguments. Usage: GUM_EMIT_ARGS(mySignal, arg1, arg2, ...).
#define GUM_EMIT1(signal, arg1)
#define GUM_EMIT2(signal, arg1, arg2)
#define GUM_EMIT3(signal, arg1, arg2, arg3)
#define GUM_EMIT4(signal, arg1, arg2, arg3, arg4)
#define GUM_EMIT5(signal, arg1, arg2, arg3, arg4, arg5)
#define GUM_EMIT6(signal, arg1, arg2, arg3, arg4, arg5, arg6)
#define GUM_EMIT7(signal, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
#define GUM_CONNECT(sender, signal, receiver, target)
 Macro to connect a signal to a listener's member function.

Typedefs

using gum::Signaler0 = Signaler<>
 Signaler with no arguments.

Detailed Description

C++20 variadic template implementation of the Signaler/Listener pattern.

This file provides the single entry point for the signal/listener pattern. All signalers are unified under a single variadic template Signaler<Args...>.

Usage:

// Declare signals with any number of arguments
Signaler0 onSimpleEvent; // 0 arguments (alias for Signaler<>)
Signaler<int> onProgress; // 1 argument
Signaler<int, std::string> onMessage; // 2 arguments
Signaler<NodeId, Idx, Idx> onChange; // 3 arguments
// ... any number of arguments supported
// Emit signals
GUM_EMIT0(onSimpleEvent);
GUM_EMIT_ARGS(onProgress, 42);
GUM_EMIT_ARGS(onMessage, 1, "hello");
// Connect signals
GUM_CONNECT(emitter, onProgress, receiver, MyClass::handleProgress);
#define GUM_CONNECT(sender, signal, receiver, target)
Definition listener.h:117
#define GUM_EMIT0(signal)
Emit a signal with no additional arguments.
Definition signaler.h:282
#define GUM_EMIT_ARGS(signal,...)
Emit a signal with variadic arguments. Usage: GUM_EMIT_ARGS(mySignal, arg1, arg2, ....
Definition signaler.h:286
Author
Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU)

Definition in file signaler.h.

Macro Definition Documentation

◆ GUM_CONNECT

#define GUM_CONNECT ( sender,
signal,
receiver,
target )
Value:
(sender).signal.attach(&(receiver), &target)

Macro to connect a signal to a listener's member function.

Definition at line 301 of file signaler.h.

◆ GUM_EMIT0

#define GUM_EMIT0 ( signal)
Value:
(signal)(this)

Emit a signal with no additional arguments.

Definition at line 282 of file signaler.h.

◆ GUM_EMIT1

◆ GUM_EMIT2

◆ GUM_EMIT3

◆ GUM_EMIT4

#define GUM_EMIT4 ( signal,
arg1,
arg2,
arg3,
arg4 )
Value:
GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4)

Definition at line 292 of file signaler.h.

◆ GUM_EMIT5

#define GUM_EMIT5 ( signal,
arg1,
arg2,
arg3,
arg4,
arg5 )
Value:
GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5)

Definition at line 293 of file signaler.h.

293#define GUM_EMIT5(signal, arg1, arg2, arg3, arg4, arg5) \
294 GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5)

◆ GUM_EMIT6

#define GUM_EMIT6 ( signal,
arg1,
arg2,
arg3,
arg4,
arg5,
arg6 )
Value:
GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5, arg6)

Definition at line 295 of file signaler.h.

295#define GUM_EMIT6(signal, arg1, arg2, arg3, arg4, arg5, arg6) \
296 GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5, arg6)

◆ GUM_EMIT7

#define GUM_EMIT7 ( signal,
arg1,
arg2,
arg3,
arg4,
arg5,
arg6,
arg7 )
Value:
GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5, arg6, arg7)

Definition at line 297 of file signaler.h.

297#define GUM_EMIT7(signal, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
298 GUM_EMIT_ARGS(signal, arg1, arg2, arg3, arg4, arg5, arg6, arg7)

◆ GUM_EMIT_ARGS

#define GUM_EMIT_ARGS ( signal,
... )
Value:
(signal)(this, __VA_ARGS__)

Emit a signal with variadic arguments. Usage: GUM_EMIT_ARGS(mySignal, arg1, arg2, ...).

Definition at line 286 of file signaler.h.