X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fpoll.cpp;h=7aa41e1c330c9ac41ae5ebdf9fa96eb3678a274c;hp=a5d2d023c81d3f1ae730fc69d8d903b5546926db;hb=HEAD;hpb=242a4a9abe1e1113b5eb39aa751aa054f696d7be diff --git a/source/io/poll.cpp b/source/io/poll.cpp index a5d2d02..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,30 +24,30 @@ 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(PolledObject(&obj, ev)); + objects.push_back({ &obj, ev }); objs_changed = true; } @@ -92,7 +91,7 @@ PollEvent poll(EventObject &obj, PollEvent pe) PollEvent poll(EventObject &obj, PollEvent pe, const Time::TimeDelta &timeout) { if(timeout(timeout/Time::msec)); }