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 Wed Nov 10 20:56:36 2004 for Eris by  doxygen 1.3.9.1