--- rxvt-unicode/src/iom_perl.xs 2006/12/14 15:19:31 1.1 +++ rxvt-unicode/src/iom_perl.xs 2007/11/11 04:08:00 1.4 @@ -1,10 +1,45 @@ ############################################################################# +# IOM_CLASS constants +############################################################################# + +BOOT: +{ + { + HV *stash = gv_stashpv ("IOM_CLASS", 1); + SV *baseclass = newSVpv ("IOM_CLASS::watcher", 0); + + static const struct { + const char *name; + IV iv; + } *civ, iom_const_iv[] = { +# define iom_const_iv(name) { # name, (IV)name } + iom_const_iv (EV_NONE), + iom_const_iv (EV_READ), + iom_const_iv (EV_WRITE), +# undef iom_const + }; + + for (civ = iom_const_iv + sizeof (iom_const_iv) / sizeof (iom_const_iv [0]); civ-- > iom_const_iv; ) + newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); + + /* slightly dirty to put the same scalar into all those arrays, but */ + /* we do not expect users to modify them anyways */ + av_push (get_av ("IOM_CLASS" "::timer::ISA", 1), SvREFCNT_inc (baseclass)); + av_push (get_av ("IOM_CLASS" "::iow::ISA", 1), SvREFCNT_inc (baseclass)); + av_push (get_av ("IOM_CLASS" "::pw::ISA", 1), SvREFCNT_inc (baseclass)); + av_push (get_av ("IOM_CLASS" "::iw::ISA", 1), SvREFCNT_inc (baseclass)); + + SvREFCNT_dec (baseclass); + } +} + +############################################################################# # IOM_CLASS::watcher ############################################################################# MODULE = IOM_MODULE PACKAGE = IOM_CLASS::watcher -CHAINED +IOM_CHAINED perl_watcher::cb (SV *cb) CODE: THIS->cb (cb); @@ -21,7 +56,7 @@ timer::new () CODE: timer *w = new timer; - w->start (NOW); + w->start (0); RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::timer"); w->self = (HV *)SvRV (RETVAL); OUTPUT: @@ -34,35 +69,35 @@ OUTPUT: RETVAL -CHAINED -timer::interval (NV interval) +IOM_CHAINED +timer::interval (NV repeat) CODE: - THIS->interval = interval; + THIS->repeat = repeat; OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::set (NV tstamp) CODE: THIS->set (tstamp); OUTPUT: RETVAL -CHAINED -timer::start (NV tstamp = THIS->at) +IOM_CHAINED +timer::start (NV tstamp = ev::now ()) CODE: - THIS->start (tstamp); + THIS->start (tstamp - ev::now ()); OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::after (NV delay) CODE: - THIS->start (NOW + delay); + THIS->start (delay); OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::stop () CODE: THIS->stop (); @@ -87,28 +122,28 @@ OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::fd (int fd) CODE: THIS->fd = fd; OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::events (short events) CODE: THIS->events = events; OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::start () CODE: THIS->start (); OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::stop () CODE: THIS->stop (); @@ -133,14 +168,14 @@ OUTPUT: RETVAL -CHAINED +IOM_CHAINED iw::start () CODE: THIS->start (); OUTPUT: RETVAL -CHAINED +IOM_CHAINED iw::stop () CODE: THIS->stop (); @@ -165,14 +200,14 @@ OUTPUT: RETVAL -CHAINED +IOM_CHAINED pw::start (int pid) CODE: THIS->start (pid); OUTPUT: RETVAL -CHAINED +IOM_CHAINED pw::stop () CODE: THIS->stop ();