X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=inline;f=source%2Fio%2Fpoll.cpp;h=4ca2f3d9767ea3315d172ba25dd51831afb7f660;hb=f804a61c1c58529e7c98555a921b56bc05059d5e;hp=2e33502e8433969059dccdd1ecbde834a3e6aff7;hpb=292aed8e23ea543b089d5f2a73000de4640befe7;p=libs%2Fcore.git diff --git a/source/io/poll.cpp b/source/io/poll.cpp index 2e33502..4ca2f3d 100644 --- a/source/io/poll.cpp +++ b/source/io/poll.cpp @@ -1,4 +1,5 @@ #include +#include #include "eventobject.h" #include "poll.h" #include "poll_platform.h" @@ -25,20 +26,20 @@ 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; @@ -48,16 +49,16 @@ void Poller::set_object(EventObject &obj, PollEvent ev) throw logic_error("Maximum number of wait objects reached"); #endif - objects.push_back(Slot(&obj, ev)); + objects.push_back(PolledObject(&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 +83,6 @@ int Poller::do_poll(int timeout) } - PollEvent platform_poll(EventObject &, PollEvent, int); PollEvent poll(EventObject &obj, PollEvent pe)