📄 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_PVcaddr_t T_PVwchar_t * T_PVwchar_t T_IVbool_t T_IVsize_t T_IVssize_t T_IVtime_t T_NVunsigned long * T_OPAQUEPTRchar ** T_PACKEDvoid * 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_IVU32 T_U_LONGU16 T_U_SHORTU8 T_UVResult T_U_CHARBoolean T_IVdouble T_DOUBLESysRet T_SYSRETSysRetLong T_SYSRETFILE * T_INFileHandle T_PTROBJInputStream T_INInOutStream T_INOUTOutputStream T_OUTbool T_BOOL#############################################################################INPUTT_SV $var = $argT_SVREF if (sv_isa($arg, \"${ntype}\")) $var = (SV*)SvRV($arg); else croak(\"$var is not of type ${ntype}\")T_AVREF if (sv_isa($arg, \"${ntype}\")) $var = (AV*)SvRV($arg); else croak(\"$var is not of type ${ntype}\")T_HVREF if (sv_isa($arg, \"${ntype}\")) $var = (HV*)SvRV($arg); else croak(\"$var is not of type ${ntype}\")T_CVREF if (sv_isa($arg, \"${ntype}\")) $var = (CV*)SvRV($arg); else croak(\"$var is not of type ${ntype}\")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 = (int)SvIV($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($arg,PL_na)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($arg,PL_na)T_PTR $var = INT2PTR($type,SvIV($arg))T_PTRREF if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); $var = INT2PTR($type,tmp); } else croak(\"$var is not a reference\")T_REF_IV_REF if (sv_isa($arg, \"${type}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = *($type *) tmp; } else croak(\"$var is not of type ${ntype}\")T_REF_IV_PTR if (sv_isa($arg, \"${type}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = ($type) tmp; } else croak(\"$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 croak(\"$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 croak(\"$var is not of type ${ntype}\")T_REFREF if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); $var = *INT2PTR($type,tmp); } else croak(\"$var is not a reference\")T_REFOBJ if (sv_isa($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = *INT2PTR($type,tmp); } else croak(\"$var is not of type ${ntype}\")T_OPAQUE $var NOT IMPLEMENTEDT_OPAQUEPTR $var = ($type)SvPV($arg,PL_na)T_PACKED $var = XS_unpack_$ntype($arg)T_PACKEDARRAY $var = XS_unpack_$ntype($arg)T_CALLBACK $var = make_perl_cb_$type($arg)T_ARRAY $var = $ntype(items -= $argoff); U32 ix_$var = $argoff; while (items--) { DO_ARRAY_ELEM; }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 sv_setrefref($arg, \"${ntype}\", XS_service_$ntype, ($var ? (void*)new $ntype($var) : 0));T_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 ST_EXTEND($var.size); for (U32 ix_$var = 0; ix_$var < $var.size; ix_$var++) { ST(ix_$var) = sv_newmortal(); DO_ARRAY_ELEM } SP += $var.size - 1;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 + -