void Poller::rebuild_array()
{
- priv->pfd.clear();
+ if(objs_changed)
+ {
+ priv->pfd.clear();
+ priv->pfd.reserve(objects.size());
- for(EventMap::iterator i=objects.begin(); i!=objects.end(); ++i)
+ for(vector<PolledObject>::const_iterator i=objects.begin(); i!=objects.end(); ++i)
+ {
+ pollfd p;
+ p.fd = *i->object->get_event_handle();
+ p.events = sys_poll_event(i->events);
+ priv->pfd.push_back(p);
+ }
+ }
+ else
{
- pollfd p;
- p.fd = *i->first->get_event_handle();
- p.events = sys_poll_event(i->second);
- priv->pfd.push_back(p);
+ for(unsigned i=0; i<objects.size(); ++i)
+ priv->pfd[i].events = sys_poll_event(objects[i].events);
}
-
- objs_changed = false;
}
void Poller::platform_poll(int timeout)
throw system_error("poll");
}
- EventMap::iterator j = objects.begin();
- for(vector<pollfd>::iterator i=priv->pfd.begin(); (i!=priv->pfd.end() && ret>0); ++i, ++j)
- if(i->revents)
+ for(unsigned i=0; (i<objects.size() && ret>0); ++i)
+ if(priv->pfd[i].revents)
{
- poll_result.push_back(Slot(j->first, poll_event_from_sys(i->revents)));
+ poll_result.push_back(PolledObject(objects[i].object, poll_event_from_sys(priv->pfd[i].revents)));
--ret;
}
}