22#include "feed/impl/TrackableSignal.hpp"
23#include "util/Mutex.hpp"
25#include <boost/signals2.hpp>
32#include <unordered_map>
38 { std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
48template <
Hashable Key,
typename Session,
typename... Args>
50 using ConnectionPtr = Session*;
51 using ConnectionSharedPtr = std::shared_ptr<Session>;
53 using SignalsMap = std::unordered_map<Key,
TrackableSignal<Session, Args...>>;
68 connectTrackableSlot(ConnectionSharedPtr
const& trackable, Key
const& key, std::function<
void(Args...)> slot)
70 auto map = signalsMap_.template lock<std::scoped_lock>();
84 auto map = signalsMap_.template lock<std::scoped_lock>();
85 if (!map->contains(key))
88 auto const disconnected = map->operator[](key).
disconnect(trackablePtr);
90 if (disconnected && map->operator[](key).count() == 0)
103 emit(Key
const& key, Args
const&... args)
105 auto map = signalsMap_.template lock<std::scoped_lock>();
106 if (map->contains(key))
107 map->operator[](key).
emit(args...);
Class to manage a map of key and its associative signal.
Definition TrackableSignalMap.hpp:49
void emit(Key const &key, Args const &... args)
Emit the signal with the given key and arguments.
Definition TrackableSignalMap.hpp:103
bool disconnect(ConnectionPtr trackablePtr, Key const &key)
Disconnect a slot from the key's associative signal.
Definition TrackableSignalMap.hpp:82
bool connectTrackableSlot(ConnectionSharedPtr const &trackable, Key const &key, std::function< void(Args...)> slot)
Connect a slot to the signal, the slot will be called when the signal is emitted and trackable is sti...
Definition TrackableSignalMap.hpp:68
A thread-safe class to manage a signal and its tracking connections.
Definition TrackableSignal.hpp:44
A container for data that is protected by a mutex. Inspired by Mutex in Rust.
Definition Mutex.hpp:96
Definition TrackableSignalMap.hpp:37