]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/poll.h
Make sure all classes have sensible copy semantics
[libs/core.git] / source / io / poll.h
index f59b499ddbc3bad3702c42a56507c32969ddac84..b65166d24bffb7cf8d7aea7e30f09f525c7b84d2 100644 (file)
@@ -4,12 +4,13 @@
 #include <list>
 #include <map>
 #include <vector>
 #include <list>
 #include <map>
 #include <vector>
+#include <msp/core/noncopyable.h>
 #include <msp/time/timedelta.h>
 
 namespace Msp {
 namespace IO {
 
 #include <msp/time/timedelta.h>
 
 namespace Msp {
 namespace IO {
 
-class Base;
+class EventObject;
 
 enum PollEvent
 {
 
 enum PollEvent
 {
@@ -17,7 +18,8 @@ enum PollEvent
        P_INPUT = 1,
        P_PRIO = 2,
        P_OUTPUT = 4,
        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)
 };
 
 inline PollEvent operator|(PollEvent e, PollEvent f)
@@ -30,20 +32,20 @@ inline PollEvent operator~(PollEvent e)
 { return PollEvent(~static_cast<int>(e)); }
 
 
 { return PollEvent(~static_cast<int>(e)); }
 
 
-class Poller
+class Poller: private NonCopyable
 {
 public:
        struct Slot
        {
 {
 public:
        struct Slot
        {
-               Base *object;
+               EventObject *object;
                PollEvent events;
 
                PollEvent events;
 
-               Slot(Base *o, PollEvent e): object(o), events(e) { }
+               Slot(EventObject *o, PollEvent e): object(o), events(e) { }
        };
 
        typedef std::list<Slot> SlotList;
 private:
        };
 
        typedef std::list<Slot> SlotList;
 private:
-       typedef std::map<Base *, PollEvent> EventMap;
+       typedef std::map<EventObject *, PollEvent> EventMap;
 
        struct Private;
 
 
        struct Private;
 
@@ -54,19 +56,21 @@ private:
 
 public:
        Poller();
 
 public:
        Poller();
+       ~Poller();
 
 
-       void set_object(Base &, PollEvent);
+       void set_object(EventObject &, PollEvent);
        int poll();
        int poll(const Time::TimeDelta &);
 private:
        void rebuild_array();
        int do_poll(int);
        int poll();
        int poll(const Time::TimeDelta &);
 private:
        void rebuild_array();
        int do_poll(int);
+       void platform_poll(int);
 public:
        const SlotList &get_result() const { return poll_result; }
 };
 
 public:
        const SlotList &get_result() const { return poll_result; }
 };
 
-PollEvent poll(Base &, PollEvent);
-PollEvent poll(Base &, PollEvent, const Time::TimeDelta &);
+PollEvent poll(EventObject &, PollEvent);
+PollEvent poll(EventObject &, PollEvent, const Time::TimeDelta &);
 
 } // namespace IO
 } // namespace Msp
 
 } // namespace IO
 } // namespace Msp