11 using ObserverFunction = std::function<void(Args...)>;
13 void Broadcast(Args... args) {
14 std::scoped_lock lck(mutex);
18 void Subscribe(ObserverFunction func) {
19 std::scoped_lock lck(mutex);
24 std::scoped_lock lck(mutex);
31 ObserverFunction function;
38 using ObserverFunction = std::function<void(Args...)>;
40 void Broadcast(Args... args) {
41 std::scoped_lock lck(mutex);
42 for (
auto& [_, func] : observers) {
47 ObserverHandle Subscribe(ObserverFunction func) {
48 std::scoped_lock lck(mutex);
49 ObserverHandle handle = ++currentHandle;
50 observers.emplace(handle, func);
54 void Unsubscribe(ObserverHandle handle) {
55 std::scoped_lock lck(mutex);
56 observers.erase(handle);
62 ObserverHandle currentHandle = 0;
63 std::unordered_map<ObserverHandle, ObserverFunction> observers;