X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fpoll.cpp;h=7aa41e1c330c9ac41ae5ebdf9fa96eb3678a274c;hp=2e33502e8433969059dccdd1ecbde834a3e6aff7;hb=HEAD;hpb=292aed8e23ea543b089d5f2a73000de4640befe7 diff --git a/source/io/poll.cpp b/source/io/poll.cpp index 2e33502..7aa41e1 100644 --- a/source/io/poll.cpp +++ b/source/io/poll.cpp @@ -1,4 +1,5 @@ -#include +#include +#include #include "eventobject.h" #include "poll.h" #include "poll_platform.h" @@ -9,9 +10,7 @@ namespace Msp { namespace IO { Poller::Poller(): - priv(new Private), - events_changed(false), - objs_changed(false) + priv(new Private) { } Poller::~Poller() @@ -25,39 +24,39 @@ void Poller::set_object(EventObject &obj, PollEvent ev) if(ev) obj.get_event_handle(); - for(vector::iterator i=objects.begin(); i!=objects.end(); ++i) - if(i->object==&obj) + auto i = find_member(objects, &obj, &PolledObject::object); + if(i!=objects.end()) + { + if(ev) + i->events = ev; + else { - if(ev) - i->events = ev; - else - { - *i = objects.back(); - objects.pop_back(); - objs_changed = true; - } - events_changed = true; - return; + *i = objects.back(); + objects.pop_back(); + objs_changed = true; } + events_changed = true; + return; + } if(!ev) return; #ifdef _WIN32 if(objects.size()>=MAXIMUM_WAIT_OBJECTS) - throw logic_error("Maximum number of wait objects reached"); + throw invalid_state("too many objects"); #endif - objects.push_back(Slot(&obj, ev)); + objects.push_back({ &obj, ev }); objs_changed = true; } -int Poller::poll() +unsigned Poller::poll() { return do_poll(-1); } -int Poller::poll(const Time::TimeDelta &timeout) +unsigned Poller::poll(const Time::TimeDelta &timeout) { if(timeout(timeout/Time::msec)); } -int Poller::do_poll(int timeout) +unsigned Poller::do_poll(int timeout) { if(objs_changed || events_changed) { @@ -82,7 +81,6 @@ int Poller::do_poll(int timeout) } - PollEvent platform_poll(EventObject &, PollEvent, int); PollEvent poll(EventObject &obj, PollEvent pe) @@ -93,7 +91,7 @@ PollEvent poll(EventObject &obj, PollEvent pe) PollEvent poll(EventObject &obj, PollEvent pe, const Time::TimeDelta &timeout) { if(timeout(timeout/Time::msec)); }