--- gvpe/src/iom.h 2004/05/10 18:57:08 1.20 +++ gvpe/src/iom.h 2004/09/02 07:50:43 1.21 @@ -81,57 +81,35 @@ } }; +// only used as a namespace, and for initialisation purposes class io_manager { -#if IOM_IO - io_manager_vec iow; -#endif -#if IOM_CHECK - io_manager_vec cw; -#endif -#if IOM_TIME - io_manager_vec tw; -#endif -#if IOM_IDLE - io_manager_vec iw; -#endif -#if IOM_SIG - typedef io_manager_vec sig_vec; - vector sw; - static void sighandler (int signum); -#endif - template - void reg (watcher *w, io_manager_vec &queue); + static void reg (watcher &w, io_manager_vec &queue); template - void unreg (watcher *w, io_manager_vec &queue); + static void unreg (watcher &w, io_manager_vec &queue); public: // register a watcher #if IOM_IO - void reg (io_watcher *w); void unreg (io_watcher *w); + static void reg (io_watcher &w); static void unreg (io_watcher &w); #endif #if IOM_TIME - void reg (time_watcher *w); void unreg (time_watcher *w); + static void reg (time_watcher &w); static void unreg (time_watcher &w); #endif #if IOM_CHECK - void reg (check_watcher *w); void unreg (check_watcher *w); + static void reg (check_watcher &w); static void unreg (check_watcher &w); #endif #if IOM_IDLE - void reg (idle_watcher *w); void unreg (idle_watcher *w); + static void reg (idle_watcher &w); static void unreg (idle_watcher &w); #endif #if IOM_SIG - void reg (sig_watcher *w); void unreg (sig_watcher *w); + static void reg (sig_watcher &w); static void unreg (sig_watcher &w); #endif - void loop (); - - io_manager (); - ~io_manager (); + static void loop (); }; -extern io_manager iom; // a singleton, together with it's construction/destruction problems. - struct watcher { int active; /* 0 == inactive, else index into respective vector */ @@ -148,9 +126,9 @@ void set (int fd_, short events_) { fd = fd_; events = events_; } void set (short events_) { set (fd, events_); } - void start () { iom.reg (this); } - void start (int fd_, short events_) { set (fd_, events_); iom.reg (this); } - void stop () { iom.unreg (this); } + void start () { io_manager::reg (*this); } + void start (int fd_, short events_) { set (fd_, events_); io_manager::reg (*this); } + void stop () { io_manager::unreg (*this); } template io_watcher (O1 *object, void (O2::*method) (io_watcher &, short)) @@ -168,9 +146,9 @@ void set (tstamp when) { at = when; } void operator () () { trigger (); } - void start () { iom.reg (this); } - void start (tstamp when) { set (when); iom.reg (this); } - void stop () { iom.unreg (this); } + void start () { io_manager::reg (*this); } + void start (tstamp when) { set (when); io_manager::reg (*this); } + void stop () { io_manager::unreg (*this); } template time_watcher (O1 *object, void (O2::*method) (time_watcher &)) @@ -183,8 +161,8 @@ #if IOM_CHECK // run before checking for new events struct check_watcher : watcher, callback1 { - void start () { iom.reg (this); } - void stop () { iom.unreg (this); } + void start () { io_manager::reg (*this); } + void stop () { io_manager::unreg (*this); } template check_watcher (O1 *object, void (O2::*method) (check_watcher &)) @@ -197,8 +175,8 @@ #if IOM_IDLE // run after checking for any i/o, but before waiting struct idle_watcher : watcher, callback1 { - void start () { iom.reg (this); } - void stop () { iom.unreg (this); } + void start () { io_manager::reg (*this); } + void stop () { io_manager::unreg (*this); } template idle_watcher (O1 *object, void (O2::*method) (idle_watcher &)) @@ -213,7 +191,7 @@ int signum; void start (int signum); - void stop () { iom.unreg (this); } + void stop () { io_manager::unreg (*this); } template sig_watcher (O1 *object, void (O2::*method) (sig_watcher &))