ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.xs
(Generate patch)

Comparing EV/EV.xs (file contents):
Revision 1.15 by root, Wed Oct 31 10:50:05 2007 UTC vs.
Revision 1.18 by root, Wed Oct 31 11:55:42 2007 UTC

10#define EV_COMMON \ 10#define EV_COMMON \
11 SV *self; /* contains this struct */ \ 11 SV *self; /* contains this struct */ \
12 SV *cb_sv, *fh; 12 SV *cb_sv, *fh;
13 13
14#include "EV/EVAPI.h" 14#include "EV/EVAPI.h"
15
16#include "libev/ev.c"
15 17
16typedef int Signal; 18typedef int Signal;
17 19
18static struct EVAPI evapi; 20static struct EVAPI evapi;
19 21
208 } 210 }
209 211
210 LEAVE; 212 LEAVE;
211} 213}
212#endif 214#endif
215
216#define CHECK_REPEAT(repeat) if (repeat < 0.) \
217 croak (# repeat " value must be >= 0");
213 218
214///////////////////////////////////////////////////////////////////////////// 219/////////////////////////////////////////////////////////////////////////////
215// XS interface functions 220// XS interface functions
216 221
217MODULE = EV PACKAGE = EV PREFIX = ev_ 222MODULE = EV PACKAGE = EV PREFIX = ev_
271 evapi.loop = ev_loop; 276 evapi.loop = ev_loop;
272 evapi.io_start = evio_start; 277 evapi.io_start = evio_start;
273 evapi.io_stop = evio_stop; 278 evapi.io_stop = evio_stop;
274 evapi.timer_start = evtimer_start; 279 evapi.timer_start = evtimer_start;
275 evapi.timer_stop = evtimer_stop; 280 evapi.timer_stop = evtimer_stop;
281 evapi.timer_again = evtimer_again;
276 evapi.periodic_start = evperiodic_start; 282 evapi.periodic_start = evperiodic_start;
277 evapi.periodic_stop = evperiodic_stop; 283 evapi.periodic_stop = evperiodic_stop;
278 evapi.signal_start = evsignal_start; 284 evapi.signal_start = evsignal_start;
279 evapi.signal_stop = evsignal_stop; 285 evapi.signal_stop = evsignal_stop;
280 evapi.idle_start = evidle_start; 286 evapi.idle_start = evidle_start;
321 RETVAL 327 RETVAL
322 328
323struct ev_timer *timer (NV after, NV repeat, SV *cb) 329struct ev_timer *timer (NV after, NV repeat, SV *cb)
324 ALIAS: 330 ALIAS:
325 timer_ns = 1 331 timer_ns = 1
332 INIT:
333 CHECK_REPEAT (repeat);
326 CODE: 334 CODE:
327 RETVAL = e_new (sizeof (struct ev_timer), cb); 335 RETVAL = e_new (sizeof (struct ev_timer), cb);
328 evtimer_set (RETVAL, after, repeat); 336 evtimer_set (RETVAL, after, repeat);
329 if (!ix) evtimer_start (RETVAL); 337 if (!ix) evtimer_start (RETVAL);
330 OUTPUT: 338 OUTPUT:
331 RETVAL 339 RETVAL
332 340
333struct ev_periodic *periodic (NV at, NV interval, SV *cb) 341struct ev_periodic *periodic (NV at, NV interval, SV *cb)
334 ALIAS: 342 ALIAS:
335 periodic_ns = 1 343 periodic_ns = 1
344 INIT:
345 CHECK_REPEAT (interval);
336 CODE: 346 CODE:
337 RETVAL = e_new (sizeof (struct ev_periodic), cb); 347 RETVAL = e_new (sizeof (struct ev_periodic), cb);
338 evperiodic_set (RETVAL, at, interval); 348 evperiodic_set (RETVAL, at, interval);
339 if (!ix) evperiodic_start (RETVAL); 349 if (!ix) evperiodic_start (RETVAL);
340 OUTPUT: 350 OUTPUT:
463MODULE = EV PACKAGE = EV::Time 473MODULE = EV PACKAGE = EV::Time
464 474
465MODULE = EV PACKAGE = EV::Timer PREFIX = evtimer_ 475MODULE = EV PACKAGE = EV::Timer PREFIX = evtimer_
466 476
467void evtimer_start (struct ev_timer *w) 477void evtimer_start (struct ev_timer *w)
478 INIT:
479 CHECK_REPEAT (w->repeat);
468 480
469void evtimer_stop (struct ev_timer *w) 481void evtimer_stop (struct ev_timer *w)
470 482
483void evtimer_again (struct ev_timer *w)
484 INIT:
485 CHECK_REPEAT (w->repeat);
486
471void set (struct ev_timer *w, NV after, NV repeat = 0.) 487void set (struct ev_timer *w, NV after, NV repeat = 0.)
488 INIT:
489 CHECK_REPEAT (repeat);
472 CODE: 490 CODE:
473{ 491{
474 int active = w->active; 492 int active = w->active;
475 if (active) evtimer_stop (w); 493 if (active) evtimer_stop (w);
476 evtimer_set (w, after, repeat); 494 evtimer_set (w, after, repeat);
478} 496}
479 497
480MODULE = EV PACKAGE = EV::Periodic PREFIX = evperiodic_ 498MODULE = EV PACKAGE = EV::Periodic PREFIX = evperiodic_
481 499
482void evperiodic_start (struct ev_periodic *w) 500void evperiodic_start (struct ev_periodic *w)
501 INIT:
502 CHECK_REPEAT (w->interval);
483 503
484void evperiodic_stop (struct ev_periodic *w) 504void evperiodic_stop (struct ev_periodic *w)
485 505
486void set (struct ev_periodic *w, NV at, NV interval = 0.) 506void set (struct ev_periodic *w, NV at, NV interval = 0.)
507 INIT:
508 CHECK_REPEAT (interval);
487 CODE: 509 CODE:
488{ 510{
489 int active = w->active; 511 int active = w->active;
490 if (active) evperiodic_stop (w); 512 if (active) evperiodic_stop (w);
491 evperiodic_set (w, at, interval); 513 evperiodic_set (w, at, interval);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines