X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fpoll.cpp;h=a58090792fcb06cf9c4a2a9049159ac7324524a8;hp=d78a2c01c023602bbcdb080abde3c0eab798887e;hb=b4806214e905752617691f851717033fd3f266c2;hpb=e46de55d3c8f65d3b0eeaee76247476695e9eb7c diff --git a/source/io/poll.cpp b/source/io/poll.cpp index d78a2c0..a580907 100644 --- a/source/io/poll.cpp +++ b/source/io/poll.cpp @@ -5,8 +5,9 @@ #endif #include #include -#include -#include "base.h" +#include "eventobject.h" +#include "handle.h" +#include "handle_private.h" #include "poll.h" using namespace std; @@ -16,7 +17,7 @@ namespace { using namespace Msp; using namespace Msp::IO; -inline int sys_poll_event(PollEvent event) +inline short int sys_poll_event(PollEvent event) { int result = 0; @@ -55,13 +56,13 @@ inline PollEvent poll_event_from_sys(int event) return result; } -inline PollEvent do_poll(Base &obj, PollEvent pe, int timeout) +inline PollEvent do_poll(EventObject &obj, PollEvent pe, int timeout) { #ifdef WIN32 if(timeout<0) timeout = INFINITE; - DWORD ret = WaitForSingleObject(obj.get_event_handle(), timeout); + DWORD ret = WaitForSingleObject(*obj.get_event_handle(), timeout); if(ret==WAIT_OBJECT_0) return pe; else if(ret==WAIT_FAILED) @@ -69,7 +70,7 @@ inline PollEvent do_poll(Base &obj, PollEvent pe, int timeout) return P_NONE; #else - pollfd pfd = { obj.get_event_handle(), sys_poll_event(pe), 0 }; + pollfd pfd = { *obj.get_event_handle(), sys_poll_event(pe), 0 }; int ret = ::poll(&pfd, 1, timeout); if(ret==-1) @@ -105,7 +106,12 @@ Poller::Poller(): objs_changed(false) { } -void Poller::set_object(Base &obj, PollEvent ev) +Poller::~Poller() +{ + delete priv; +} + +void Poller::set_object(EventObject &obj, PollEvent ev) { // Verify that the object has an event handle if(ev) @@ -152,14 +158,14 @@ void Poller::rebuild_array() priv->handles.clear(); for(EventMap::iterator i=objects.begin(); i!=objects.end(); ++i) - priv->handles.push_back(i->first->get_event_handle()); + priv->handles.push_back(*i->first->get_event_handle()); #else priv->pfd.clear(); for(EventMap::iterator i=objects.begin(); i!=objects.end(); ++i) { pollfd p; - p.fd = i->first->get_event_handle(); + p.fd = *i->first->get_event_handle(); p.events = sys_poll_event(i->second); priv->pfd.push_back(p); } @@ -216,12 +222,12 @@ int Poller::do_poll(int timeout) } -PollEvent poll(Base &obj, PollEvent pe) +PollEvent poll(EventObject &obj, PollEvent pe) { return do_poll(obj, pe, -1); } -PollEvent poll(Base &obj, PollEvent pe, const Time::TimeDelta &timeout) +PollEvent poll(EventObject &obj, PollEvent pe, const Time::TimeDelta &timeout) { if(timeout