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

Comparing rxvt-unicode/src/iom.C (file contents):
Revision 1.5 by pcg, Sat Nov 29 18:42:07 2003 UTC vs.
Revision 1.7 by pcg, Fri Dec 19 06:17:03 2003 UTC

105{ 105{
106 unreg (w, cw); 106 unreg (w, cw);
107} 107}
108#endif 108#endif
109 109
110#if IOM_IDLE
111idle_watcher::~idle_watcher ()
112{
113 if (iom_valid)
114 iom.unreg (this);
115}
116
117void io_manager::reg (idle_watcher *w)
118{
119 reg (w, iw);
120}
121
122void io_manager::unreg (idle_watcher *w)
123{
124 unreg (w, iw);
125}
126#endif
127
110#if IOM_TIME 128#if IOM_TIME
111inline void set_now (void) 129inline void set_now (void)
112{ 130{
113 struct timeval tv; 131 struct timeval tv;
114 132
124 set_now (); 142 set_now ();
125#endif 143#endif
126 144
127 for (;;) 145 for (;;)
128 { 146 {
147 struct timeval *to = 0;
148 struct timeval tval;
149
150#if IOM_IDLE
151 if (iw.size ())
152 {
153 tval.tv_sec = 0;
154 tval.tv_usec = 0;
155 to = &tval;
156 }
157 else
158#endif
159 {
160#if IOM_TIME
161 time_watcher *w;
162
163 for (;tw.size ();)
164 {
165 w = tw[0];
166
167 for (time_watcher **i = tw.begin (); i < tw.end (); ++i)
168 if ((*i)->at < w->at)
169 w = *i;
170
171 if (w->at > NOW)
172 {
173 double diff = w->at - NOW;
174 tval.tv_sec = (int)diff;
175 tval.tv_usec = (int)((diff - tval.tv_sec) * 1000000);
176 to = &tval;
177 break;
178 }
179 else if (w->at >= 0)
180 w->call (*w);
181 else
182 unreg (w);
183 }
184#endif
185 }
186
129#if IOM_CHECK 187#if IOM_CHECK
130 for (int i = 0; i < cw.size (); ++i) 188 for (int i = 0; i < cw.size (); ++i)
131 cw[i]->call (*cw[i]); 189 cw[i]->call (*cw[i]);
132#endif
133
134 struct timeval *to = 0;
135
136#if IOM_TIME
137 struct timeval tval;
138 time_watcher *w;
139
140 for (;tw.size ();)
141 {
142 w = tw[0];
143
144 for (time_watcher **i = tw.begin (); i < tw.end (); ++i)
145 if ((*i)->at < w->at)
146 w = *i;
147
148 if (w->at > NOW)
149 {
150 double diff = w->at - NOW;
151 tval.tv_sec = (int)diff;
152 tval.tv_usec = (int)((diff - tval.tv_sec) * 1000000);
153 to = &tval;
154 break;
155 }
156 else if (w->at >= 0)
157 w->call (*w);
158 else
159 unreg (w);
160 }
161#endif 190#endif
162 191
163#if IOM_IO 192#if IOM_IO
164 fd_set rfd, wfd; 193 fd_set rfd, wfd;
165 194
195 if (!FD_ISSET (w->fd, &wfd)) revents &= ~EVENT_WRITE; 224 if (!FD_ISSET (w->fd, &wfd)) revents &= ~EVENT_WRITE;
196 225
197 if (revents) 226 if (revents)
198 w->call (*w, revents); 227 w->call (*w, revents);
199 } 228 }
229#if IOM_IDLE
230 else if (iw.size ())
231 for (int i = 0; i < iw.size (); ++i)
232 iw[i]->call (*iw[i]);
233#endif
234
200#elif IOM_TIME 235#elif IOM_TIME
201 if (!to) 236 if (!to)
202 break; 237 break;
203 238
204 select (0, 0, 0, 0, &to); 239 select (0, 0, 0, 0, &to);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines