1 #ifndef MSP_GAME_EVENTOBSERVER_H_
2 #define MSP_GAME_EVENTOBSERVER_H_
4 #include <msp/core/algorithm.h>
5 #include <msp/core/noncopyable.h>
10 class EventSourceBase;
12 class EventObserver: public NonCopyable
16 std::vector<EventSourceBase *> observed_sources;
19 EventObserver(EventBus &);
23 void observe(std::function<void(const T &)> cb)
24 { bus.add_observer<T>(*this, std::move(cb)); }
26 template<typename T, typename S>
27 void observe(S &, std::function<void(const T &)> );
29 void remove_source(EventSourceBase &);
32 template<typename T, typename S>
33 void EventObserver::observe(S &src, std::function<void(const T &)> cb)
35 src.add_observer(*this, std::move(cb));
36 auto i = lower_bound(observed_sources, &src);
37 if(i==observed_sources.end() || *i!=&src)
38 observed_sources.insert(i, &src);
41 } // namespace Msp::Game