TYPEMAP # # T_PTROBJ_SPECIAL translates _ to :: # # note: Audio_SndFile and SNDFILE* both map to Audio::SndFile perl objects # Audio_SndFile contains a SNDFILE* Audio_SndFile T_PTROBJ_SPECIAL Audio_SndFile_Info T_PTROBJ_SPECIAL sf_count_t T_U_LONG SNDFILE* SNDFILEP # # T_PTROBJ_SPECIAL_RO is like T_PTROBJ_SPECIAL, but has no OUTPUT map # # these are used for creating objects that are derived from a base # but who's package names are unknown at compile time (they are # composed from the plugins loaded at runtime) # INPUT T_PTROBJ_SPECIAL if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = ($type) tmp; } else croak(\"$var is not of type ${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\") T_PTROBJ_SPECIAL_RO if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = ($type) tmp; } else croak(\"$var is not of type ${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\") SNDFILEP if (sv_derived_from($arg, \"Audio::SndFile\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = ((Audio_SndFile) tmp)->sndfile; } else { croak(\"$var is not an of type Audio::SndFile\"); } OUTPUT T_PTROBJ_SPECIAL sv_setref_pv($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\", (void*)$var);