X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fgame%2Feventobserver.cpp;fp=source%2Fgame%2Feventobserver.cpp;h=440d2994b776e340f16064cc72869bc89ed20d81;hb=6a93721ab67315e916f6c649b1f7bc5447d611a4;hp=0000000000000000000000000000000000000000;hpb=b644c89c81d89f60a0d82fe208fc76ce1c278a4c;p=libs%2Fgame.git diff --git a/source/game/eventobserver.cpp b/source/game/eventobserver.cpp new file mode 100644 index 0000000..440d299 --- /dev/null +++ b/source/game/eventobserver.cpp @@ -0,0 +1,24 @@ +#include "eventobserver.h" +#include "eventsource.h" + +namespace Msp::Game { + +EventObserver::EventObserver(EventBus &b): + bus(b) +{ } + +EventObserver::~EventObserver() +{ + bus.remove_observer(*this); + for(EventSourceBase *s: observed_sources) + s->remove_observer(*this); +} + +void EventObserver::remove_source(EventSourceBase &src) +{ + auto i = lower_bound(observed_sources, &src); + if(i!=observed_sources.end() && *i==&src) + observed_sources.erase(i); +} + +} // namespace Msp::Game