📄 typemap
字号:
# basic C typesint T_IVunsigned T_UVunsigned int T_UVlong T_IVunsigned long T_UVshort T_IVunsigned short T_UVchar T_CHARunsigned char T_U_CHARchar * T_PVunsigned char * T_PVconst char * T_PVcaddr_t T_PVwchar_t * T_PVwchar_t T_IVbool_t T_IVsize_t T_UVssize_t T_IVtime_t T_NVunsigned long * T_OPAQUEPTRchar ** T_PACKEDARRAYvoid * T_PTRTime_t * T_PVSV * T_SVSVREF T_SVREFAV * T_AVREFHV * T_HVREFCV * T_CVREFIV T_IVUV T_UVNV T_NVI32 T_IVI16 T_IVI8 T_IVSTRLEN T_UVU32 T_U_LONGU16 T_U_SHORTU8 T_UVResult T_U_CHARBoolean T_BOOLfloat T_FLOATdouble T_DOUBLESysRet T_SYSRETSysRetLong T_SYSRETFILE * T_STDIOPerlIO * T_INOUTFileHandle T_PTROBJInputStream T_INInOutStream T_INOUTOutputStream T_OUTbool T_BOOL#############################################################################INPUTT_SV $var = $argT_SVREF if (SvROK($arg)) $var = (SV*)SvRV($arg); else Perl_croak(aTHX_ \"$var is not a reference\")T_AVREF if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) $var = (AV*)SvRV($arg); else Perl_croak(aTHX_ \"$var is not an array reference\")T_HVREF if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV) $var = (HV*)SvRV($arg); else Perl_croak(aTHX_ \"$var is not a hash reference\")T_CVREF if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVCV) $var = (CV*)SvRV($arg); else Perl_croak(aTHX_ \"$var is not a code reference\")T_SYSRET $var NOT IMPLEMENTEDT_UV $var = ($type)SvUV($arg)T_IV $var = ($type)SvIV($arg)T_INT $var = (int)SvIV($arg)T_ENUM $var = ($type)SvIV($arg)T_BOOL $var = (bool)SvTRUE($arg)T_U_INT $var = (unsigned int)SvUV($arg)T_SHORT $var = (short)SvIV($arg)T_U_SHORT $var = (unsigned short)SvUV($arg)T_LONG $var = (long)SvIV($arg)T_U_LONG $var = (unsigned long)SvUV($arg)T_CHAR $var = (char)*SvPV_nolen($arg)T_U_CHAR $var = (unsigned char)SvUV($arg)T_FLOAT $var = (float)SvNV($arg)T_NV $var = ($type)SvNV($arg)T_DOUBLE $var = (double)SvNV($arg)T_PV $var = ($type)SvPV_nolen($arg)T_PTR $var = INT2PTR($type,SvIV($arg))T_PTRREF if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); $var = INT2PTR($type,tmp); } else Perl_croak(aTHX_ \"$var is not a reference\")T_REF_IV_REF if (sv_isa($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = *INT2PTR($type *, tmp); } else Perl_croak(aTHX_ \"$var is not of type ${ntype}\")T_REF_IV_PTR if (sv_isa($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = INT2PTR($type, tmp); } else Perl_croak(aTHX_ \"$var is not of type ${ntype}\")T_PTROBJ if (sv_derived_from($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = INT2PTR($type,tmp); } else Perl_croak(aTHX_ \"$var is not of type ${ntype}\")T_PTRDESC if (sv_isa($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); ${type}_desc = (\U${type}_DESC\E*) tmp; $var = ${type}_desc->ptr; } else Perl_croak(aTHX_ \"$var is not of type ${ntype}\")T_REFREF if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); $var = *INT2PTR($type,tmp); } else Perl_croak(aTHX_ \"$var is not a reference\")T_REFOBJ if (sv_isa($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = *INT2PTR($type,tmp); } else Perl_croak(aTHX_ \"$var is not of type ${ntype}\")T_OPAQUE $var = *($type *)SvPV_nolen($arg)T_OPAQUEPTR $var = ($type)SvPV_nolen($arg)T_PACKED $var = XS_unpack_$ntype($arg)T_PACKEDARRAY $var = XS_unpack_$ntype($arg)T_CALLBACK $var = make_perl_cb_$type($arg)T_ARRAY U32 ix_$var = $argoff; $var = $ntype(items -= $argoff); while (items--) { DO_ARRAY_ELEM; ix_$var++; } /* this is the number of elements in the array */ ix_$var -= $argoffT_STDIO $var = PerlIO_findFILE(IoIFP(sv_2io($arg)))T_IN $var = IoIFP(sv_2io($arg))T_INOUT $var = IoIFP(sv_2io($arg))T_OUT $var = IoOFP(sv_2io($arg))#############################################################################OUTPUTT_SV $arg = $var;T_SVREF $arg = newRV((SV*)$var);T_AVREF $arg = newRV((SV*)$var);T_HVREF $arg = newRV((SV*)$var);T_CVREF $arg = newRV((SV*)$var);T_IV sv_setiv($arg, (IV)$var);T_UV sv_setuv($arg, (UV)$var);T_INT sv_setiv($arg, (IV)$var);T_SYSRET if ($var != -1) { if ($var == 0) sv_setpvn($arg, "0 but true", 10); else sv_setiv($arg, (IV)$var); }T_ENUM sv_setiv($arg, (IV)$var);T_BOOL $arg = boolSV($var);T_U_INT sv_setuv($arg, (UV)$var);T_SHORT sv_setiv($arg, (IV)$var);T_U_SHORT sv_setuv($arg, (UV)$var);T_LONG sv_setiv($arg, (IV)$var);T_U_LONG sv_setuv($arg, (UV)$var);T_CHAR sv_setpvn($arg, (char *)&$var, 1);T_U_CHAR sv_setuv($arg, (UV)$var);T_FLOAT sv_setnv($arg, (double)$var);T_NV sv_setnv($arg, (NV)$var);T_DOUBLE sv_setnv($arg, (double)$var);T_PV sv_setpv((SV*)$arg, $var);T_PTR sv_setiv($arg, PTR2IV($var));T_PTRREF sv_setref_pv($arg, Nullch, (void*)$var);T_REF_IV_REF sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));T_REF_IV_PTR sv_setref_pv($arg, \"${ntype}\", (void*)$var);T_PTROBJ sv_setref_pv($arg, \"${ntype}\", (void*)$var);T_PTRDESC sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));T_REFREF NOT_IMPLEMENTEDT_REFOBJ NOT IMPLEMENTEDT_OPAQUE sv_setpvn($arg, (char *)&$var, sizeof($var));T_OPAQUEPTR sv_setpvn($arg, (char *)$var, sizeof(*$var));T_PACKED XS_pack_$ntype($arg, $var);T_PACKEDARRAY XS_pack_$ntype($arg, $var, count_$ntype);T_DATAUNIT sv_setpvn($arg, $var.chp(), $var.size());T_CALLBACK sv_setpvn($arg, $var.context.value().chp(), $var.context.value().size());T_ARRAY { U32 ix_$var; EXTEND(SP,size_$var); for (ix_$var = 0; ix_$var < size_$var; ix_$var++) { ST(ix_$var) = sv_newmortal(); DO_ARRAY_ELEM } }T_STDIO { GV *gv = newGVgen("$Package"); PerlIO *fp = PerlIO_importFILE($var,0); if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) ) sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; }T_IN { GV *gv = newGVgen("$Package"); if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; }T_INOUT { GV *gv = newGVgen("$Package"); if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; }T_OUT { GV *gv = newGVgen("$Package"); if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &PL_sv_undef; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -