]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/poll.cpp
Clean up after the timedelta.h/units.h merge
[libs/core.git] / source / io / poll.cpp
index d78a2c01c023602bbcdb080abde3c0eab798887e..a58090792fcb06cf9c4a2a9049159ac7324524a8 100644 (file)
@@ -5,8 +5,9 @@
 #endif
 #include <msp/core/systemerror.h>
 #include <msp/strings/format.h>
-#include <msp/time/units.h>
-#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<Time::zero)
                throw invalid_argument("poll");