--- cvsroot/EV/typemap 2007/10/29 09:00:43 1.6 +++ cvsroot/EV/typemap 2010/10/24 19:01:01 1.18 @@ -1,39 +1,53 @@ -Base T_BASE -Event T_EVENT -Signal T_SIGNAL +Signal T_SIGNAL -char * T_PVbyte -const char * T_PVbyte +struct ev_loop * T_LOOP -INPUT +ev_watcher * T_WATCHER +ev_io * T_WATCHER +ev_timer * T_WATCHER +ev_periodic * T_WATCHER +ev_signal * T_WATCHER +ev_idle * T_WATCHER +ev_prepare * T_WATCHER +ev_check * T_WATCHER +ev_child * T_WATCHER +ev_embed * T_WATCHER +ev_stat * T_WATCHER +ev_fork * T_WATCHER +ev_cleanup * T_WATCHER +ev_async * T_WATCHER -T_BASE - if (!(SvROK ($arg) && SvOBJECT (SvRV ($arg)) - && SvSTASH (SvRV ($arg)) == stash_base)) - croak (\"object is not of type EV::Base\"); - $var = (Base)SvIV (SvRV ($arg)); +char * T_PVbyte +const char * T_PVbyte -T_EVENT - if (!(SvROK ($arg) && SvOBJECT (SvRV ($arg)) - && SvSTASH (SvRV ($arg)) == stash_event)) - croak (\"object is not of type EV::Event\"); - $var = (Event)SvPVX (SvRV ($arg)); +INPUT T_SIGNAL - if (($var = sv_signum ($arg)) <= 0) + if (($var = s_signum_croak ($arg)) <= 0) croak (\"'%s' is not a valid signal number or name\", SvPV_nolen ($arg)); T_PVbyte $var = ($type)SvPVbyte_nolen ($arg) -OUTPUT +T_LOOP + if (!(SvROK ($arg) && SvOBJECT (SvRV ($arg)) + && (SvSTASH (SvRV ($arg)) == stash_loop || sv_derived_from ($arg, \"EV::Loop\")))) + croak (\"object is not of type EV::Loop\"); + $var = ($type)SvIVX (SvRV ($arg)); -T_BASE - sv_setref_iv ($arg, "EV::Base", (IV)$var); +T_WATCHER + if (!(SvROK ($arg) && SvOBJECT (SvRV ($arg)) + && (SvSTASH (SvRV ($arg)) == stash_" . ($type =~ /ev_(\S+)/, "$1") . " + || sv_derived_from ($arg, \"EV::" . ($type =~ /ev_(\S+)/, ucfirst "$1") . "\")))) + croak (\"object is not of type EV::" . ($type =~ /ev_(\S+)/, ucfirst "$1") . "\"); + $var = ($type)SvPVX (SvRV ($arg)); -T_EVENT - $arg = e_self ($var); +OUTPUT T_PVbyte sv_setpv ((SV *)$arg, $var); +T_WATCHER + $arg = e_bless ((struct ev_watcher *)$var, stash_${ ($type =~ /ev_(\S+)/, \"$1") }); + +