18#ifndef COM_UBUNTU_CONNECTION_H_
19#define COM_UBUNTU_CONNECTION_H_
34 typedef std::function<void(
const std::function<
void()>&)>
Dispatcher;
45 return (d->disconnector ?
true :
false);
63 if (d && d->dispatcher_installer)
64 d->dispatcher_installer(dispatcher);
70 typedef std::function<void()> Disconnector;
71 typedef std::function<void(
const Dispatcher&)> DispatcherInstaller;
73 template<
typename ... Arguments>
friend class Signal;
75 inline Connection(
const Disconnector& disconnector,
76 const DispatcherInstaller& installer)
77 : d(std::make_shared<Private>(disconnector, installer))
81 inline bool operator<(
const Connection& rhs)
const
94 Private(
const Connection::Disconnector& disconnector,
95 const Connection::DispatcherInstaller& dispatcher_installer)
96 : disconnector(disconnector),
97 dispatcher_installer(dispatcher_installer)
103 std::lock_guard<std::mutex> lg(guard);
107 inline void reset_locked()
109 static const Connection::Disconnector empty_disconnector{};
110 static const Connection::DispatcherInstaller empty_dispatcher_installer{};
112 disconnector = empty_disconnector;
113 dispatcher_installer = empty_dispatcher_installer;
118 static const Connection::Disconnector empty_disconnector{};
120 std::lock_guard<std::mutex> lg(guard);
129 Connection::Disconnector disconnector;
130 Connection::DispatcherInstaller dispatcher_installer;
135 std::shared_ptr<Private> d;
173 connection = std::move(rhs.connection);
182 return connection < rhs.connection;
The Connection class models a signal-slot connection.
void dispatch_via(const Dispatcher &dispatcher)
Installs a dispatcher for this signal-slot connection.
void disconnect()
End a signal-slot connection.
bool is_connected() const
Checks if this instance corresponds to an active signal-slot connection.
std::function< void(const std::function< void()> &)> Dispatcher
Scoped helper class to map signal-slot connection mgmt. to RAII.
ScopedConnection(const ScopedConnection &)=delete
ScopedConnection(const Connection &c)
Constructs an instance for an existing signal-slot connection.
ScopedConnection & operator=(const ScopedConnection &)=delete
bool operator==(const ScopedConnection &)=delete
~ScopedConnection() noexcept(true)
Disconnects the signal-slot connection.
bool operator<(const ScopedConnection &rhs) const
ScopedConnection & operator=(ScopedConnection &&rhs)
ScopedConnection(ScopedConnection &&rhs)
A signal class that observers can subscribe to.