]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/windows/poll.cpp
Use vectors for storage in Poller
[libs/core.git] / source / io / windows / poll.cpp
index e67225805f3964a970f6e6d8fb93f82cb616d376..b3ee8ec9dda104712075891d33127b052b892885 100644 (file)
@@ -5,17 +5,21 @@
 #include "poll.h"
 #include "poll_platform.h"
 
 #include "poll.h"
 #include "poll_platform.h"
 
+using namespace std;
+
 namespace Msp {
 namespace IO {
 
 void Poller::rebuild_array()
 {
 namespace Msp {
 namespace IO {
 
 void Poller::rebuild_array()
 {
-       priv->handles.clear();
+       if(!objs_changed)
+               return;
 
 
-       for(EventMap::iterator i=objects.begin(); i!=objects.end(); ++i)
-               priv->handles.push_back(*i->first->get_event_handle());
+       priv->handles.clear();
+       priv->handles.reserve(objects.size());
 
 
-       objs_changed = false;
+       for(vector<Slot>::const_iterator i=objects.begin(); i!=objects.end(); ++i)
+               priv->handles.push_back(*i->object->get_event_handle());
 }
 
 void Poller::platform_poll(int timeout)
 }
 
 void Poller::platform_poll(int timeout)
@@ -26,9 +30,8 @@ void Poller::platform_poll(int timeout)
        DWORD ret = WaitForMultipleObjects(priv->handles.size(), &priv->handles.front(), false, timeout);
        if(/*ret>=WAIT_OBJECT_0 &&*/ ret<WAIT_OBJECT_0+priv->handles.size())
        {
        DWORD ret = WaitForMultipleObjects(priv->handles.size(), &priv->handles.front(), false, timeout);
        if(/*ret>=WAIT_OBJECT_0 &&*/ ret<WAIT_OBJECT_0+priv->handles.size())
        {
-               EventMap::iterator i = objects.begin();
-               advance(i, ret-WAIT_OBJECT_0);
-               poll_result.push_back(Slot(i->first, i->second));
+               const Slot &slot = objects[ret-WAIT_OBJECT_0];
+               poll_result.push_back(slot);
        }
        else if(ret==WAIT_FAILED)
                throw system_error("WaitForMultipleObjects");
        }
        else if(ret==WAIT_FAILED)
                throw system_error("WaitForMultipleObjects");