00001 #ifndef ERIS_POLL_H
00002 #define ERIS_POLL_H
00003
00004 #include <sigc++/object.h>
00005 #if SIGC_MAJOR_VERSION == 1 && SIGC_MINOR_VERSION == 0
00006 #include <sigc++/basic_signal.h>
00007 #else
00008 #include <sigc++/signal.h>
00009 #endif
00010
00011
00012 class basic_socket_stream;
00013
00014 namespace Eris {
00015
00016 class PollData
00017 {
00018 public:
00019 PollData() {}
00020 virtual ~PollData() {}
00021
00022 virtual bool isReady(const basic_socket_stream*) = 0;
00023 };
00024
00025 class Poll : public SigC::Signal1<void,PollData&>
00026 {
00027 public:
00028 Poll() : new_timeout_(false) {}
00029 virtual ~Poll() {}
00030
00031 enum Check {
00032 READ = 1,
00033 WRITE = 2,
00034 MASK = READ | WRITE
00035 };
00036
00037 virtual void addStream(const basic_socket_stream*, Check = READ) = 0;
00038 virtual void changeStream(const basic_socket_stream*, Check) = 0;
00039 virtual void removeStream(const basic_socket_stream*) = 0;
00040
00041 static Poll& instance();
00042 static void setInstance(Poll*);
00043
00044 void newTimeout() {new_timeout_ = true;}
00045
00046 private:
00047 Poll(const Poll&);
00048 static Poll *_inst;
00049 protected:
00050 bool new_timeout_;
00051 };
00052
00053 }
00054
00055 #endif // ERIS_POLL_H