#ifndef MSP_IO_POLL_H_
#define MSP_IO_POLL_H_
-#include <list>
#include <map>
#include <vector>
#include <msp/core/noncopyable.h>
class Poller: private NonCopyable
{
public:
- struct Slot
+ struct PolledObject
{
- EventObject *object;
- PollEvent events;
+ EventObject *object = nullptr;
+ PollEvent events = P_NONE;
- Slot(EventObject *o, PollEvent e): object(o), events(e) { }
+ PolledObject(EventObject *o, PollEvent e): object(o), events(e) { }
};
- typedef std::list<Slot> SlotList;
private:
- typedef std::map<EventObject *, PollEvent> EventMap;
-
struct Private;
- EventMap objects;
- Private *priv;
- bool objs_changed;
- SlotList poll_result;
+ std::vector<PolledObject> objects;
+ Private *priv = nullptr;
+ bool events_changed = false;
+ bool objs_changed = false;
+ std::vector<PolledObject> poll_result;
public:
Poller();
~Poller();
void set_object(EventObject &, PollEvent);
- int poll();
- int poll(const Time::TimeDelta &);
+ unsigned poll();
+ unsigned poll(const Time::TimeDelta &);
private:
void rebuild_array();
- int do_poll(int);
+ unsigned do_poll(int);
void platform_poll(int);
public:
- const SlotList &get_result() const { return poll_result; }
+ const std::vector<PolledObject> &get_result() const { return poll_result; }
};
PollEvent poll(EventObject &, PollEvent);