34#ifndef BERTINI_DETAIL_OBSERVABLE_HPP
35#define BERTINI_DETAIL_OBSERVABLE_HPP
59 if (find_if(begin(current_watchers_), end(current_watchers_), [&](
const auto& held_obs)
60 {
return &held_obs.get() == &new_observer; })==end(current_watchers_))
62 current_watchers_.push_back(std::ref(new_observer));
71 auto new_end = std::remove_if(current_watchers_.begin(), current_watchers_.end(),
72 [&](
const auto& held_obs)
73 { return &held_obs.get() == &observer; });
75 current_watchers_.erase(new_end, current_watchers_.end());
93 for (
auto& obs : current_watchers_)
101 for (
auto& obs : current_watchers_)
102 obs.get().Observe(e);
108 using ObserverContainer = std::vector<std::reference_wrapper<AnyObserver>>;
110 mutable ObserverContainer current_watchers_;
Strawman Event type, enabling polymorphism.
Definition detail/events.hpp:47
Strawman base class for Observer objects.
Definition observer.hpp:57
An abstract observable type, maintaining a list of observers, who can be notified in case of Events.
Definition observable.hpp:48
void RemoveObserver(AnyObserver &observer) const
Remove an observer from this observable.
Definition observable.hpp:68
void AddObserver(AnyObserver &new_observer) const
Add an observer, to observe this observable.
Definition observable.hpp:57
void NotifyObservers(AnyEvent const &e) const
Sends an Event (more particularly, AnyEvent) to all watching observers of this object.
Definition observable.hpp:90
Contains the detail/events base types.
Contains the observer base types.