#include "poll.h"
#include "poll_platform.h"
+using namespace std;
+
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(const PolledObject &po: objects)
+ priv->handles.push_back(*po.object->get_event_handle());
}
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())
{
- EventMap::iterator i = objects.begin();
- advance(i, ret-WAIT_OBJECT_0);
- poll_result.push_back(Slot(i->first, i->second));
+ const PolledObject &obj = objects[ret-WAIT_OBJECT_0];
+ poll_result.push_back(obj);
}
else if(ret==WAIT_FAILED)
throw system_error("WaitForMultipleObjects");