Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

Timeout.h

00001 #ifndef ERIS_TIMEOUT_H 00002 #define ERIS_TIMEOUT_H 00003 00004 #include <Eris/Timestamp.h> 00005 00006 #include <sigc++/object.h> 00007 #include <sigc++/signal.h> 00008 00009 #include <map> 00010 #include <string> 00011 00012 namespace Eris { 00013 00015 class Timeout : virtual public SigC::Object 00016 { 00017 public: 00018 00022 Timeout(const std::string &label, unsigned long milli); 00027 Timeout(const std::string &label, void* inst, unsigned long milli); 00028 ~Timeout(); 00029 00031 Timeout& operator=(const Timeout &t); 00032 00036 void extend(unsigned long msec); 00037 00040 void reset(unsigned long msec); 00041 00043 void cancel(); 00044 unsigned long poll(const Time::Stamp &t); 00045 00047 bool isExpired() const; 00048 00050 SigC::Signal0<void> Expired; 00051 00053 00057 static const Timeout* findByName(const std::string &lbl, void* inst = 0); 00058 00063 static unsigned long pollAll(); 00064 00067 static void extendByName(const std::string &lbl, unsigned long msec) 00068 {extendByName(lbl, 0, msec);} 00069 static void extendByName(const std::string &lbl, void* inst, unsigned long msec); 00070 00073 static void cancelByName(const std::string &lbl, void* inst = 0); 00074 00075 protected: 00077 00084 class Label { 00085 public: 00086 Label(const std::string &s, void* p = 0) : _s(s), _p(p) {} 00087 // Needs this to auto-chain char* -> string -> Label 00088 Label(const char* s, void* p = 0) : _s(s), _p(p) {} 00089 00090 // default operator=(), copy constructor are fine 00091 00092 // need these so we can be a key in std::map 00093 bool operator==(const Label& l) const 00094 {return _p == l._p && _s == l._s;} 00095 bool operator<(const Label& l) const 00096 {return _p < l._p || (_p == l._p && _s < l._s);} 00097 00098 const std::string& getString() const {return _s;} 00099 00100 private: 00101 std::string _s; 00102 void* _p; 00103 }; 00104 00105 const Label _label; 00106 Time::Stamp _due; 00107 bool _fired; 00108 00109 typedef std::map<Label, Timeout*> TimeoutMap; 00110 static TimeoutMap _allTimeouts; 00111 00112 private: 00115 Timeout(const Timeout &t); 00116 }; 00117 00118 } // of Eris namespace 00119 00120 #endif

Generated on Tue Jul 27 21:00:43 2004 for Eris by doxygen 1.3.7