X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Feventdispatcher.cpp;h=cf37c1e7e1fbd81155608895bd14ebe9bd882e10;hp=06a594f76d397165789940184f7c1a8d0ab65771;hb=ea8bf8f588310b0d7fd3297d74907602705bba1d;hpb=6e0fd758970bcb5bad5e3f2454b694cc4d7b4b66 diff --git a/source/io/eventdispatcher.cpp b/source/io/eventdispatcher.cpp index 06a594f..cf37c1e 100644 --- a/source/io/eventdispatcher.cpp +++ b/source/io/eventdispatcher.cpp @@ -1,6 +1,7 @@ -#include +#include #include "base.h" #include "eventdispatcher.h" +#include "eventobject.h" #include "poll.h" namespace Msp { @@ -9,7 +10,10 @@ namespace IO { EventDispatcher::EventDispatcher() { } -void EventDispatcher::add(Base &obj) +EventDispatcher::~EventDispatcher() +{ } + +void EventDispatcher::add(EventObject &obj) { SlotMap::iterator i = objects.find(&obj); if(i==objects.end()) @@ -23,7 +27,7 @@ void EventDispatcher::add(Base &obj) } } -void EventDispatcher::remove(Base &obj) +void EventDispatcher::remove(EventObject &obj) { SlotMap::iterator i = objects.find(&obj); if(i!=objects.end()) @@ -54,20 +58,29 @@ void EventDispatcher::tick(const Time::TimeDelta &dt) dispatch(); } -void EventDispatcher::object_events_changed(PollEvent ev, Base *obj) +void EventDispatcher::tick(const Time::Timer &timer) +{ + const Time::TimeStamp &timeout = timer.get_next_timeout(); + if(timeout) + tick(timeout-Time::now()); + else + tick(); +} + +void EventDispatcher::object_events_changed(PollEvent ev, EventObject *obj) { poller.set_object(*obj, ev); } -void EventDispatcher::object_deleted(Base *obj) +void EventDispatcher::object_deleted(EventObject *obj) { remove(*obj); } void EventDispatcher::dispatch() { - const Poller::SlotSeq &result = poller.get_result(); - for(Poller::SlotSeq::const_iterator i=result.begin(); i!=result.end(); ++i) + const Poller::SlotList &result = poller.get_result(); + for(Poller::SlotList::const_iterator i=result.begin(); i!=result.end(); ++i) i->object->event(i->events); }