14#include <unordered_map>
24namespace subscription {
37template <
typename... Args>
class Publisher {
42 Publisher() =
default;
55 std::lock_guard<std::mutex> lock(_mutex);
56 _subscribers.emplace(token, std::move(callback));
68 std::lock_guard<std::mutex> lock(_mutex);
69 _subscribers.erase(token);
82 for (
const auto& cb : callbacks) {
99 std::vector<Callback> callbacks;
101 std::lock_guard<std::mutex> lock(_mutex);
102 callbacks.reserve(_subscribers.size());
103 for (
const auto& [token, cb] : _subscribers) {
105 callbacks.push_back(cb);
113 mutable std::mutex _mutex;
114 std::unordered_map<SubscriberToken, Callback> _subscribers;
Opaque token identifying a subscription.
RAII wrapper pairing a SubscriberToken with its cancel function.
Subscription subscribe(Callback callback)
Register a callback.
Definition Publisher.hpp:49
void unsubscribe(SubscriberToken token)
Remove a previously registered callback.
Definition Publisher.hpp:67
std::function< void(Args...)> Callback
Callback type for subscribers.
Definition Publisher.hpp:40
std::vector< Callback > copySubscribers() const
Copy the current subscriber list under lock.
Definition Publisher.hpp:98
void publish(Args... args) const
Invoke all registered callbacks with the given arguments.
Definition Publisher.hpp:80
Move-only RAII wrapper that pairs a SubscriberToken with an unsubscribe callable. Destroying a Subscr...
Definition Subscription.hpp:32
Opaque token identifying a subscription (state or device group).
Definition SubscriberToken.hpp:25
static SubscriberToken getNextToken() noexcept
Get the next token.
Definition SubscriberToken.hpp:43