00001 #ifndef TOOLS_H_ 00002 #define TOOLS_H_ 00003 #undef NDEBUG 00004 00013 #include "scheduler.h" 00014 00015 typedef void (*pfEventHandler) (void *); 00016 00017 void prnerr(char *fmt, ...); 00018 00019 00020 class UanTimer : public Handler { 00021 protected: 00023 void *object; 00024 00026 bool busy; 00028 double stime; 00030 double rtime; 00032 Event intr; 00033 00034 public: 00036 UanTimer(void *obj) : Handler(), object(obj), busy(false) { } 00037 00039 virtual void start(double time); 00041 virtual void restart(double time); 00043 virtual void stop(void); 00045 virtual void handle(Event *e)=0; 00047 inline bool isBusy(void) { 00048 return busy; 00049 } 00051 inline double expire(void) { 00052 return ((stime + rtime) - Scheduler::instance().clock()); 00053 } 00054 00055 }; 00056 00068 class UanEventTimer : public UanTimer { 00069 protected: 00071 pfEventHandler handler; 00072 public: 00074 00075 UanEventTimer(void *obj, pfEventHandler h) : UanTimer(obj), handler(h) {} 00076 00078 virtual void handle(Event *e) { 00079 handler(object); 00080 busy = false; 00081 } 00082 }; 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092 00093 #endif /*TOOLS_H_*/