11#include <shared_mutex>
14template<
typename... Args>
23 std::unique_lock<std::shared_mutex> lock(
mutex_);
31 std::unique_lock<std::shared_mutex> lock(
mutex_);
32 auto it = std::find_if(
observers_.begin(),
observers_.end(), [
id](
const auto& obs) { return obs.id == id; });
43 std::vector<ObserverWrapper> observersCopy;
45 std::shared_lock<std::shared_mutex> lock(
mutex_);
49 for (
const auto& observer : observersCopy)
53 observer.callback(args...);
55 catch (
const std::exception& e)
57 std::cerr <<
"Exception in observer " << observer.id <<
": " << e.what() << std::endl;
61 std::cerr <<
"Unknown exception in observer " << observer.id << std::endl;
68 std::unique_lock<std::shared_mutex> lock(
mutex_);
74 std::shared_lock<std::shared_mutex> lock(
mutex_);
80 std::shared_lock<std::shared_mutex> lock(
mutex_);
82 [&](
const auto& obs) { return obs.callback.target_type() == observer.target_type(); });
Definition Observer.hpp:16
std::vector< ObserverWrapper > observers_
Definition Observer.hpp:98
bool removeObserver(ObserverId id)
Definition Observer.hpp:29
std::optional< ObserverId > findObserver(const Observer &observer) const
Definition Observer.hpp:78
ObserverId addObserver(Observer observer)
Definition Observer.hpp:21
std::shared_mutex mutex_
Definition Observer.hpp:97
size_t ObserverId
Definition Observer.hpp:19
void notify(Args... args) const
Definition Observer.hpp:41
ObserverId nextObserverId_
Definition Observer.hpp:99
size_t observerCount() const
Definition Observer.hpp:72
void clearObservers()
Definition Observer.hpp:66
std::function< void(Args...)> Observer
Definition Observer.hpp:18
Definition Observer.hpp:92
Observer callback
Definition Observer.hpp:93
ObserverId id
Definition Observer.hpp:94