ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/iom.h
(Generate patch)

Comparing rxvt-unicode/src/iom.h (file contents):
Revision 1.24 by root, Mon Jan 9 22:41:41 2006 UTC vs.
Revision 1.25 by root, Thu Jan 19 09:47:15 2006 UTC

26// - a vector template like simplevec or stl's vector 26// - a vector template like simplevec or stl's vector
27// - defines for all watcher types required in your app 27// - defines for all watcher types required in your app
28// edit iom_conf.h as appropriate. 28// edit iom_conf.h as appropriate.
29#include "iom_conf.h" 29#include "iom_conf.h"
30 30
31#if IOM_CHILD
32# undef IOM_SIG
33# define IOM_SIG 1
34#endif
35
31#include "callback.h" 36#include "callback.h"
32
33#ifndef IOM_IO
34# define IOM_IO 0
35#endif
36#ifndef IOM_TIME
37# define IOM_TIME 0
38#endif
39#ifndef IOM_CHECK
40# define IOM_CHECK 0
41#endif
42#ifndef IOM_IDLE
43# define IOM_IDLE 0
44#endif
45#ifndef IOM_SIG
46# define IOM_SIG 0
47#endif
48 37
49typedef double tstamp; 38typedef double tstamp;
50extern tstamp NOW; 39extern tstamp NOW;
51 40
52// TSTAMP_MAX must still fit into a positive struct timeval 41// TSTAMP_MAX must still fit into a positive struct timeval
65#if IOM_IDLE 54#if IOM_IDLE
66struct idle_watcher; 55struct idle_watcher;
67#endif 56#endif
68#if IOM_SIG 57#if IOM_SIG
69struct sig_watcher; 58struct sig_watcher;
59#endif
60#if IOM_CHILD
61struct child_watcher;
70#endif 62#endif
71 63
72template<class watcher> 64template<class watcher>
73struct io_manager_vec : vector<watcher *> { 65struct io_manager_vec : vector<watcher *> {
74 void erase_unordered (unsigned int pos) 66 void erase_unordered (unsigned int pos)
113 static void reg (idle_watcher &w); static void unreg (idle_watcher &w); 105 static void reg (idle_watcher &w); static void unreg (idle_watcher &w);
114#endif 106#endif
115#if IOM_SIG 107#if IOM_SIG
116 static void reg (sig_watcher &w); static void unreg (sig_watcher &w); 108 static void reg (sig_watcher &w); static void unreg (sig_watcher &w);
117#endif 109#endif
110#if IOM_CHILD
111 static void reg (child_watcher &w); static void unreg (child_watcher &w);
112#endif
118 113
119 static void loop (); 114 static void loop ();
120}; 115};
121 116
122struct watcher { 117struct watcher {
139 void start (int fd_, short events_) { set (fd_, events_); io_manager::reg (*this); } 134 void start (int fd_, short events_) { set (fd_, events_); io_manager::reg (*this); }
140 void stop () { io_manager::unreg (*this); } 135 void stop () { io_manager::unreg (*this); }
141 136
142 template<class O1, class O2> 137 template<class O1, class O2>
143 io_watcher (O1 *object, void (O2::*method) (io_watcher &, short)) 138 io_watcher (O1 *object, void (O2::*method) (io_watcher &, short))
144 : callback2<void, io_watcher &, short> (object,method) 139 : callback2<void, io_watcher &, short> (object, method)
145 { } 140 { }
146 ~io_watcher () { stop (); } 141 ~io_watcher () { stop (); }
147}; 142};
148#endif 143#endif
149 144
159 void start (tstamp when) { set (when); io_manager::reg (*this); } 154 void start (tstamp when) { set (when); io_manager::reg (*this); }
160 void stop () { io_manager::unreg (*this); } 155 void stop () { io_manager::unreg (*this); }
161 156
162 template<class O1, class O2> 157 template<class O1, class O2>
163 time_watcher (O1 *object, void (O2::*method) (time_watcher &)) 158 time_watcher (O1 *object, void (O2::*method) (time_watcher &))
164 : callback1<void, time_watcher &> (object,method), at (0) 159 : callback1<void, time_watcher &> (object, method), at (0)
165 { } 160 { }
166 ~time_watcher () { stop (); } 161 ~time_watcher () { stop (); }
167}; 162};
168#endif 163#endif
169 164
173 void start () { io_manager::reg (*this); } 168 void start () { io_manager::reg (*this); }
174 void stop () { io_manager::unreg (*this); } 169 void stop () { io_manager::unreg (*this); }
175 170
176 template<class O1, class O2> 171 template<class O1, class O2>
177 check_watcher (O1 *object, void (O2::*method) (check_watcher &)) 172 check_watcher (O1 *object, void (O2::*method) (check_watcher &))
178 : callback1<void, check_watcher &> (object,method) 173 : callback1<void, check_watcher &> (object, method)
179 { } 174 { }
180 ~check_watcher () { stop (); } 175 ~check_watcher () { stop (); }
181}; 176};
182#endif 177#endif
183 178
187 void start () { io_manager::reg (*this); } 182 void start () { io_manager::reg (*this); }
188 void stop () { io_manager::unreg (*this); } 183 void stop () { io_manager::unreg (*this); }
189 184
190 template<class O1, class O2> 185 template<class O1, class O2>
191 idle_watcher (O1 *object, void (O2::*method) (idle_watcher &)) 186 idle_watcher (O1 *object, void (O2::*method) (idle_watcher &))
192 : callback1<void, idle_watcher &> (object,method) 187 : callback1<void, idle_watcher &> (object, method)
193 { } 188 { }
194 ~idle_watcher () { stop (); } 189 ~idle_watcher () { stop (); }
195}; 190};
196#endif 191#endif
197 192
202 void start (int signum); 197 void start (int signum);
203 void stop () { io_manager::unreg (*this); } 198 void stop () { io_manager::unreg (*this); }
204 199
205 template<class O1, class O2> 200 template<class O1, class O2>
206 sig_watcher (O1 *object, void (O2::*method) (sig_watcher &)) 201 sig_watcher (O1 *object, void (O2::*method) (sig_watcher &))
207 : callback1<void, sig_watcher &> (object,method), signum (-1) 202 : callback1<void, sig_watcher &> (object, method), signum (0)
208 { } 203 { }
209 ~sig_watcher () { stop (); } 204 ~sig_watcher () { stop (); }
210}; 205};
211#endif 206#endif
212 207
213#endif 208#if IOM_CHILD
209struct child_watcher : watcher, callback2<void, child_watcher &, int> {
210 int /*pid_t*/ pid;
214 211
212 void start (int pid) { this->pid = pid; io_manager::reg (*this); }
213 void stop () { io_manager::unreg (*this); }
214
215 template<class O1, class O2>
216 child_watcher (O1 *object, void (O2::*method) (child_watcher &, int status))
217 : callback2<void, child_watcher &, int> (object, method), pid (0)
218 { }
219 ~child_watcher () { stop (); }
220};
221#endif
222
223#endif
224

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines