]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/poll.h
Additional adjustments for Poller
[libs/core.git] / source / io / poll.h
index 09e00e5bbedb6313bea0832d09eb0e451a5ffe3d..40c15a70cb84389caa0d9df7a0273383dbc87ac2 100644 (file)
@@ -1,9 +1,10 @@
 #ifndef MSP_IO_POLL_H_
 #define MSP_IO_POLL_H_
 
-#include <list>
 #include <map>
 #include <vector>
+#include <msp/core/attributes.h>
+#include <msp/core/noncopyable.h>
 #include <msp/time/timedelta.h>
 
 namespace Msp {
@@ -17,7 +18,8 @@ enum PollEvent
        P_INPUT = 1,
        P_PRIO = 2,
        P_OUTPUT = 4,
-       P_ERROR = 8
+       P_ERROR = 8,
+       P_HANGUP = 16
 };
 
 inline PollEvent operator|(PollEvent e, PollEvent f)
@@ -30,41 +32,42 @@ inline PollEvent operator~(PollEvent e)
 { return PollEvent(~static_cast<int>(e)); }
 
 
-class Poller
+class Poller: private NonCopyable
 {
 public:
-       struct Slot
+       struct PolledObject
        {
                EventObject *object;
                PollEvent events;
 
-               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;
+       typedef PolledObject Slot DEPRECATED;
 
+       typedef std::vector<PolledObject> SlotList DEPRECATED;
+private:
        struct Private;
 
-       EventMap objects;
+       std::vector<PolledObject> objects;
        Private *priv;
+       bool events_changed;
        bool objs_changed;
-       SlotList poll_result;
+       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);