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