--- rxvt-unicode/src/iom.h 2004/01/16 22:11:09 1.6 +++ rxvt-unicode/src/iom.h 2004/02/13 12:16:21 1.11 @@ -1,6 +1,6 @@ /* iom.h -- generic I/O multiplexor - Copyright (C) 2003 Marc Lehmann + Copyright (C) 2003, 2004 Marc Lehmann This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,22 +17,25 @@ Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef VPE_IOM_H__ -#define VPE_IOM_H__ +#ifndef IOM_H__ +#define IOM_H__ -#include +// required: +// - a vector template like simplevec or stl's vector +// - defines for all watcher types required in your app +// edit iom_conf.h as appropriate. +#include "iom_conf.h" #include "callback.h" -#include "rxvtvec.h" #ifndef IOM_IO -# define IOM_IO 1 +# define IOM_IO 0 #endif #ifndef IOM_TIME -# define IOM_TIME 1 +# define IOM_TIME 0 #endif #ifndef IOM_CHECK -# define IOM_CHECK 1 +# define IOM_CHECK 0 #endif #ifndef IOM_IDLE # define IOM_IDLE 0 @@ -41,23 +44,26 @@ typedef double tstamp; extern tstamp NOW; +struct watcher; #if IOM_IO - struct io_watcher; +struct io_watcher; #endif #if IOM_TIME - struct time_watcher; +struct time_watcher; #endif #if IOM_CHECK - struct check_watcher; +struct check_watcher; #endif #if IOM_IDLE - struct idle_watcher; +struct idle_watcher; #endif template -struct io_manager_vec : protected simplevec { - friend class io_manager; -protected: +struct io_manager_vec : vector { +#if IOM_CHECK + bool activity; +#endif + void erase_unordered (unsigned int pos) { watcher *w = (*this)[size () - 1]; @@ -84,10 +90,10 @@ #endif template - void reg (watcher *w, simplevec &queue); + void reg (watcher *w, io_manager_vec &queue); template - void unreg (watcher *w, simplevec &queue); + void unreg (watcher *w, io_manager_vec &queue); public: // register a watcher @@ -115,7 +121,7 @@ struct watcher { int active; /* 0 == inactive, else index into respective vector */ - watcher() : active(0) { } + watcher () : active (0) { } }; #if IOM_IO @@ -133,8 +139,8 @@ void stop () { iom.unreg (this); } template - io_watcher (O1 *object, void (O2::*method)(io_watcher &, short)) - : callback2(object,method) + io_watcher (O1 *object, void (O2::*method) (io_watcher &, short)) + : callback2 (object,method) { } ~io_watcher () { stop (); } }; @@ -147,14 +153,14 @@ void trigger (); void set (tstamp when) { at = when; } - void operator ()() { trigger (); } + void operator () () { trigger (); } void start () { iom.reg (this); } void start (tstamp when) { set (when); iom.reg (this); } void stop () { iom.unreg (this); } template - time_watcher (O1 *object, void (O2::*method)(time_watcher &)) - : callback1(object,method) + time_watcher (O1 *object, void (O2::*method) (time_watcher &)) + : callback1 (object,method), at (0) { } ~time_watcher () { stop (); } }; @@ -167,8 +173,8 @@ void stop () { iom.unreg (this); } template - check_watcher (O1 *object, void (O2::*method)(check_watcher &)) - : callback1(object,method) + check_watcher (O1 *object, void (O2::*method) (check_watcher &)) + : callback1 (object,method) { } ~check_watcher () { stop (); } }; @@ -181,8 +187,8 @@ void stop () { iom.unreg (this); } template - idle_watcher (O1 *object, void (O2::*method)(idle_watcher &)) - : callback1(object,method) + idle_watcher (O1 *object, void (O2::*method) (idle_watcher &)) + : callback1 (object,method) { } ~idle_watcher () { stop (); } };