home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
perl560.zip
/
jpl
/
JNI
/
typemap.gcc
< prev
next >
Wrap
Text File
|
1999-09-14
|
9KB
|
387 lines
JavaVM * T_JPTROBJ
JNINativeMethod * T_JPTROBJ
const char * T_PV
const jbyte * T_JMEM
const jchar * T_JMEM
jarray T_JPTROBJ
jboolean T_IV
jboolean * T_JMEM
jbooleanArray T_JPTROBJ
jbyte T_IV
jbyte * T_JMEM
jbyteArray T_JPTROBJ
jchar T_IV
jchar * T_JMEM
jcharArray T_JPTROBJ
jclass T_JPTROBJ
jdouble T_NV
jdouble * T_JMEM
jdoubleArray T_JPTROBJ
jfieldID T_JIDSIG
jfloat T_NV
jfloat * T_JMEM
jfloatArray T_JPTROBJ
jint T_IV
jint * T_JMEM
jintArray T_JPTROBJ
jlong T_NV
jlong * T_JMEM
jlongArray T_JPTROBJ
jmethodID T_JIDSIG
jobject T_JPTROBJ
jobjectArray T_JPTROBJ
jshort T_IV
jshort * T_JMEM
jshortArray T_JPTROBJ
jsize T_IV
jstring T_JSTRING
jthrowable T_JPTROBJ
jvalue * T_JVALUELIST
INPUT
T_JMEM
{
$var = ($type)SvPV($arg,tmplen);
${var}_len_ = (jsize) tmplen / sizeof(${subtype});
}
T_JSTRING
if (SvROK($arg)) {
$var = ($type)(void*)SvIV(SvRV($arg));
}
else
$var = ($type)(*env)->NewStringUTF(env, (char *) SvPV($arg,PL_na))
T_JVALUELIST
if (SvROK($arg)) {
AV* av = (AV*)SvRV($arg);
if (SvTYPE(av) == SVt_PVAV) {
I32 maxarg = AvFILL(av) + 1;
$var = makeargs(sig, AvARRAY(av), maxarg);
}
else
croak(\"$var is not an array reference\");
}
else
croak(\"$var is not a reference\")
T_JIDSIG
{
$var = ($type)SvIV($arg);
sig = (char*)SvPV($arg,PL_na);
}
T_JPTROBJ
if (SvROK($arg) && SvOBJECT(SvRV($arg))) {
IV tmp = SvIV((SV*)SvRV($arg));
$var = ($type) tmp;
}
else
croak(\"$var is not of type ${ntype}\")
OUTPUT
T_JMEM
sv_setpvn((SV*)$arg, (char*)$var, (STRLEN)${var}_len_ * sizeof(${subtype}));
T_JSTRING
{
static HV* ${var}_stashhv_ = 0;
if (!${var}_stashhv_)
${var}_stashhv_ = gv_stashpv("java::lang::String", TRUE);
sv_bless(
sv_setref_iv($arg, Nullch, (IV)(void*)${var}),
${var}_stashhv_);
}
T_JIDSIG
sv_setiv($arg, (IV)(void*)$var);
sv_setpv($arg, (char*)sig);
SvIOK_on($arg);
T_JPTROBJ
sv_setref_pv($arg, \"${ntype}\", (void*)$var);
# basic C types
# int T_IV
# unsigned T_IV
# unsigned int T_IV
# long T_IV
# unsigned long T_IV
# short T_IV
# unsigned short T_IV
# char T_CHAR
# unsigned char T_U_CHAR
# char * T_PV
# unsigned char * T_PV
# caddr_t T_PV
# wchar_t * T_PV
# wchar_t T_IV
# bool_t T_IV
# size_t T_IV
# ssize_t T_IV
# time_t T_NV
# unsigned long * T_OPAQUEPTR
# char ** T_PACKED
# void * T_PTR
# Time_t * T_PV
# SV * T_SV
# SVREF T_SVREF
# AV * T_AVREF
# HV * T_HVREF
# CV * T_CVREF
#
# IV T_IV
# I32 T_IV
# I16 T_IV
# I8 T_IV
# U32 T_U_LONG
# U16 T_U_SHORT
# U8 T_IV
# Result T_U_CHAR
# Boolean T_IV
# double T_DOUBLE
# SysRet T_SYSRET
# SysRetLong T_SYSRET
# FILE * T_IN
# FileHandle T_PTROBJ
# InputStream T_IN
# InOutStream T_INOUT
# OutputStream T_OUT
# bool T_BOOL
#
#############################################################################
# INPUT
# T_SV
# $var = $arg
# T_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 IMPLEMENTED
# 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)SvIV($arg)
# T_SHORT
# $var = (short)SvIV($arg)
# T_U_SHORT
# $var = (unsigned short)SvIV($arg)
# T_LONG
# $var = (long)SvIV($arg)
# T_U_LONG
# $var = (unsigned long)SvIV($arg)
# T_CHAR
# $var = (char)*SvPV($arg,PL_na)
# T_U_CHAR
# $var = (unsigned char)SvIV($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 = ($type)SvIV($arg)
# T_PTRREF
# if (SvROK($arg)) {
# IV tmp = SvIV((SV*)SvRV($arg));
# $var = ($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 = ($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 = *($type) tmp;
# }
# else
# croak(\"$var is not a reference\")
# T_REFOBJ
# if (sv_isa($arg, \"${ntype}\")) {
# IV tmp = SvIV((SV*)SvRV($arg));
# $var = *($type) tmp;
# }
# else
# croak(\"$var is not of type ${ntype}\")
# T_OPAQUE
# $var NOT IMPLEMENTED
# T_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))
##############################################################################
# OUTPUT
# T_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_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_setiv($arg, (IV)$var);
# T_SHORT
# sv_setiv($arg, (IV)$var);
# T_U_SHORT
# sv_setiv($arg, (IV)$var);
# T_LONG
# sv_setiv($arg, (IV)$var);
# T_U_LONG
# sv_setiv($arg, (IV)$var);
# T_CHAR
# sv_setpvn($arg, (char *)&$var, 1);
# T_U_CHAR
# sv_setiv($arg, (IV)$var);
# T_FLOAT
# sv_setnv($arg, (double)$var);
# T_NV
# sv_setnv($arg, (double)$var);
# T_DOUBLE
# sv_setnv($arg, (double)$var);
# T_PV
# sv_setpv((SV*)$arg, $var);
# T_PTR
# sv_setiv($arg, (IV)$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 IMPLEMENTED
# T_OPAQUE
# sv_setpvn($arg, (char *)&$var, sizeof($var));
# T_OPAQUEPTR
# sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$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;
# }