Blame typemap

Packit Service a275fa
# $Header$ 
Packit Service a275fa
# basic C types
Packit Service a275fa
int			T_IV
Packit Service a275fa
unsigned		T_UV
Packit Service a275fa
unsigned int		T_UV
Packit Service a275fa
long			T_IV
Packit Service a275fa
unsigned long		T_UV
Packit Service a275fa
short			T_IV
Packit Service a275fa
unsigned short		T_UV
Packit Service a275fa
char			T_CHAR
Packit Service a275fa
unsigned char		T_U_CHAR
Packit Service a275fa
char *			T_PV
Packit Service a275fa
unsigned char *		T_PV
Packit Service a275fa
caddr_t			T_PV
Packit Service a275fa
wchar_t *		T_PV
Packit Service a275fa
wchar_t			T_IV
Packit Service a275fa
bool_t			T_IV
Packit Service a275fa
size_t			T_IV
Packit Service a275fa
ssize_t			T_IV
Packit Service a275fa
time_t			T_NV
Packit Service a275fa
unsigned long *		T_OPAQUEPTR
Packit Service a275fa
char **			T_PACKED
Packit Service a275fa
void *			T_PTR
Packit Service a275fa
Time_t *		T_PV
Packit Service a275fa
SV *			T_SV
Packit Service a275fa
SVREF			T_SVREF
Packit Service a275fa
AV *			T_AVREF
Packit Service a275fa
HV *			T_HVREF
Packit Service a275fa
CV *			T_CVREF
Packit Service a275fa
Packit Service a275fa
IV			T_IV
Packit Service a275fa
I32			T_IV
Packit Service a275fa
I16			T_IV
Packit Service a275fa
I8			T_IV
Packit Service a275fa
U32			T_U_LONG
Packit Service a275fa
U16			T_U_SHORT
Packit Service a275fa
U8			T_UV
Packit Service a275fa
Result			T_U_CHAR
Packit Service a275fa
Boolean			T_IV
Packit Service a275fa
double			T_DOUBLE
Packit Service a275fa
SysRet			T_SYSRET
Packit Service a275fa
SysRetLong		T_SYSRET
Packit Service a275fa
FILE *			T_IN
Packit Service a275fa
FileHandle		T_PTROBJ
Packit Service a275fa
InputStream		T_IN
Packit Service a275fa
InOutStream		T_INOUT
Packit Service a275fa
OutputStream		T_OUT
Packit Service a275fa
bool			T_BOOL
Packit Service a275fa
Packit Service a275fa
#############################################################################
Packit Service a275fa
INPUT
Packit Service a275fa
T_SV
Packit Service a275fa
	$var = $arg
Packit Service a275fa
T_SVREF
Packit Service a275fa
	if (sv_isa($arg, \"${ntype}\"))
Packit Service a275fa
	    $var = (SV*)SvRV($arg);
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_AVREF
Packit Service a275fa
	if (sv_isa($arg, \"${ntype}\"))
Packit Service a275fa
	    $var = (AV*)SvRV($arg);
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_HVREF
Packit Service a275fa
	if (sv_isa($arg, \"${ntype}\"))
Packit Service a275fa
	    $var = (HV*)SvRV($arg);
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_CVREF
Packit Service a275fa
	if (sv_isa($arg, \"${ntype}\"))
Packit Service a275fa
	    $var = (CV*)SvRV($arg);
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_SYSRET
Packit Service a275fa
	$var NOT IMPLEMENTED
Packit Service a275fa
T_UV
Packit Service a275fa
	$var = ($type)SvUV($arg)
Packit Service a275fa
T_IV
Packit Service a275fa
	$var = ($type)SvIV($arg)
Packit Service a275fa
T_INT
Packit Service a275fa
	$var = (int)SvIV($arg)
Packit Service a275fa
T_ENUM
Packit Service a275fa
	$var = ($type)SvIV($arg)
Packit Service a275fa
T_BOOL
Packit Service a275fa
	$var = (int)SvIV($arg)
Packit Service a275fa
T_U_INT
Packit Service a275fa
	$var = (unsigned int)SvUV($arg)
Packit Service a275fa
T_SHORT
Packit Service a275fa
	$var = (short)SvIV($arg)
Packit Service a275fa
T_U_SHORT
Packit Service a275fa
	$var = (unsigned short)SvUV($arg)
Packit Service a275fa
T_LONG
Packit Service a275fa
	$var = (long)SvIV($arg)
Packit Service a275fa
T_U_LONG
Packit Service a275fa
	$var = (unsigned long)SvUV($arg)
Packit Service a275fa
T_CHAR
Packit Service a275fa
	$var = (char)*SvPV($arg,PL_na)
Packit Service a275fa
T_U_CHAR
Packit Service a275fa
	$var = (unsigned char)SvUV($arg)
Packit Service a275fa
T_FLOAT
Packit Service a275fa
	$var = (float)SvNV($arg)
Packit Service a275fa
T_NV
Packit Service a275fa
	$var = ($type)SvNV($arg)
Packit Service a275fa
T_DOUBLE
Packit Service a275fa
	$var = (double)SvNV($arg)
Packit Service a275fa
T_PV
Packit Service a275fa
	$var = ($type)SvPV($arg,PL_na)
Packit Service a275fa
T_PTR
Packit Service a275fa
	$var = ($type)SvIV($arg)
Packit Service a275fa
T_PTRREF
Packit Service a275fa
	if (SvROK($arg)) {
Packit Service a275fa
	    IV tmp = SvIV((SV*)SvRV($arg));
Packit Service a275fa
	    $var = ($type) tmp;
Packit Service a275fa
	}
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not a reference\")
Packit Service a275fa
T_REF_IV_REF
Packit Service a275fa
	if (sv_isa($arg, \"${type}\")) {
Packit Service a275fa
	    IV tmp = SvIV((SV*)SvRV($arg));
Packit Service a275fa
	    $var = *($type *) tmp;
Packit Service a275fa
	}
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_REF_IV_PTR
Packit Service a275fa
	if (sv_isa($arg, \"${type}\")) {
Packit Service a275fa
	    IV tmp = SvIV((SV*)SvRV($arg));
Packit Service a275fa
	    $var = ($type) tmp;
Packit Service a275fa
	}
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_PTROBJ
Packit Service a275fa
	if (sv_derived_from($arg, \"${ntype}\")) {
Packit Service a275fa
	    IV tmp = SvIV((SV*)SvRV($arg));
Packit Service a275fa
	    $var = ($type) tmp;
Packit Service a275fa
	}
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_PTRDESC
Packit Service a275fa
	if (sv_isa($arg, \"${ntype}\")) {
Packit Service a275fa
	    IV tmp = SvIV((SV*)SvRV($arg));
Packit Service a275fa
	    ${type}_desc = (\U${type}_DESC\E*) tmp; 
Packit Service a275fa
	    $var = ${type}_desc->ptr;
Packit Service a275fa
	}
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_REFREF
Packit Service a275fa
	if (SvROK($arg)) {
Packit Service a275fa
	    IV tmp = SvIV((SV*)SvRV($arg));
Packit Service a275fa
	    $var = *($type) tmp;
Packit Service a275fa
	}
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not a reference\")
Packit Service a275fa
T_REFOBJ
Packit Service a275fa
	if (sv_isa($arg, \"${ntype}\")) {
Packit Service a275fa
	    IV tmp = SvIV((SV*)SvRV($arg));
Packit Service a275fa
	    $var = *($type) tmp;
Packit Service a275fa
	}
Packit Service a275fa
	else
Packit Service a275fa
	    croak(\"$var is not of type ${ntype}\")
Packit Service a275fa
T_OPAQUE
Packit Service a275fa
	$var NOT IMPLEMENTED
Packit Service a275fa
T_OPAQUEPTR
Packit Service a275fa
	$var = ($type)SvPV($arg,PL_na)
Packit Service a275fa
T_PACKED
Packit Service a275fa
	$var = XS_unpack_$ntype($arg)
Packit Service a275fa
T_PACKEDARRAY
Packit Service a275fa
	$var = XS_unpack_$ntype($arg)
Packit Service a275fa
T_CALLBACK
Packit Service a275fa
	$var = make_perl_cb_$type($arg)
Packit Service a275fa
T_ARRAY
Packit Service a275fa
	$var = $ntype(items -= $argoff);
Packit Service a275fa
	U32 ix_$var = $argoff;
Packit Service a275fa
	while (items--) {
Packit Service a275fa
	    DO_ARRAY_ELEM;
Packit Service a275fa
	}
Packit Service a275fa
T_IN
Packit Service a275fa
	$var = IoIFP(sv_2io($arg))
Packit Service a275fa
T_INOUT
Packit Service a275fa
	$var = IoIFP(sv_2io($arg))
Packit Service a275fa
T_OUT
Packit Service a275fa
	$var = IoOFP(sv_2io($arg))
Packit Service a275fa
#############################################################################
Packit Service a275fa
OUTPUT
Packit Service a275fa
T_SV
Packit Service a275fa
	$arg = $var;
Packit Service a275fa
T_SVREF
Packit Service a275fa
	$arg = newRV((SV*)$var);
Packit Service a275fa
T_AVREF
Packit Service a275fa
	$arg = newRV((SV*)$var);
Packit Service a275fa
T_HVREF
Packit Service a275fa
	$arg = newRV((SV*)$var);
Packit Service a275fa
T_CVREF
Packit Service a275fa
	$arg = newRV((SV*)$var);
Packit Service a275fa
T_IV
Packit Service a275fa
	sv_setiv($arg, (IV)$var);
Packit Service a275fa
T_UV
Packit Service a275fa
	sv_setuv($arg, (UV)$var);
Packit Service a275fa
T_INT
Packit Service a275fa
	sv_setiv($arg, (IV)$var);
Packit Service a275fa
T_SYSRET
Packit Service a275fa
	if ($var != -1) {
Packit Service a275fa
	    if ($var == 0)
Packit Service a275fa
		sv_setpvn($arg, "0 but true", 10);
Packit Service a275fa
	    else
Packit Service a275fa
		sv_setiv($arg, (IV)$var);
Packit Service a275fa
	}
Packit Service a275fa
T_ENUM
Packit Service a275fa
	sv_setiv($arg, (IV)$var);
Packit Service a275fa
T_BOOL
Packit Service a275fa
	$arg = boolSV($var);
Packit Service a275fa
T_U_INT
Packit Service a275fa
	sv_setuv($arg, (UV)$var);
Packit Service a275fa
T_SHORT
Packit Service a275fa
	sv_setiv($arg, (IV)$var);
Packit Service a275fa
T_U_SHORT
Packit Service a275fa
	sv_setuv($arg, (UV)$var);
Packit Service a275fa
T_LONG
Packit Service a275fa
	sv_setiv($arg, (IV)$var);
Packit Service a275fa
T_U_LONG
Packit Service a275fa
	sv_setuv($arg, (UV)$var);
Packit Service a275fa
T_CHAR
Packit Service a275fa
	sv_setpvn($arg, (char *)&$var, 1);
Packit Service a275fa
T_U_CHAR
Packit Service a275fa
	sv_setuv($arg, (UV)$var);
Packit Service a275fa
T_FLOAT
Packit Service a275fa
	sv_setnv($arg, (double)$var);
Packit Service a275fa
T_NV
Packit Service a275fa
	sv_setnv($arg, (double)$var);
Packit Service a275fa
T_DOUBLE
Packit Service a275fa
	sv_setnv($arg, (double)$var);
Packit Service a275fa
T_PV
Packit Service a275fa
	sv_setpv((SV*)$arg, $var);
Packit Service a275fa
T_PTR
Packit Service a275fa
	sv_setiv($arg, (IV)$var);
Packit Service a275fa
T_PTRREF
Packit Service a275fa
	sv_setref_pv($arg, Nullch, (void*)$var);
Packit Service a275fa
T_REF_IV_REF
Packit Service a275fa
	sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
Packit Service a275fa
T_REF_IV_PTR
Packit Service a275fa
	sv_setref_pv($arg, \"${ntype}\", (void*)$var);
Packit Service a275fa
T_PTROBJ
Packit Service a275fa
	sv_setref_pv($arg, \"${ntype}\", (void*)$var);
Packit Service a275fa
T_PTRDESC
Packit Service a275fa
	sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
Packit Service a275fa
T_REFREF
Packit Service a275fa
	sv_setrefref($arg, \"${ntype}\", XS_service_$ntype,
Packit Service a275fa
		    ($var ? (void*)new $ntype($var) : 0));
Packit Service a275fa
T_REFOBJ
Packit Service a275fa
	NOT IMPLEMENTED
Packit Service a275fa
T_OPAQUE
Packit Service a275fa
	sv_setpvn($arg, (char *)&$var, sizeof($var));
Packit Service a275fa
T_OPAQUEPTR
Packit Service a275fa
	sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var);
Packit Service a275fa
T_PACKED
Packit Service a275fa
	XS_pack_$ntype($arg, $var);
Packit Service a275fa
T_PACKEDARRAY
Packit Service a275fa
	XS_pack_$ntype($arg, $var, count_$ntype);
Packit Service a275fa
T_DATAUNIT	
Packit Service a275fa
	sv_setpvn($arg, $var.chp(), $var.size());
Packit Service a275fa
T_CALLBACK
Packit Service a275fa
	sv_setpvn($arg, $var.context.value().chp(),
Packit Service a275fa
		$var.context.value().size());
Packit Service a275fa
T_ARRAY
Packit Service a275fa
	ST_EXTEND($var.size);
Packit Service a275fa
	for (U32 ix_$var = 0; ix_$var < $var.size; ix_$var++) {
Packit Service a275fa
		ST(ix_$var) = sv_newmortal();
Packit Service a275fa
	DO_ARRAY_ELEM
Packit Service a275fa
	}
Packit Service a275fa
	SP += $var.size - 1;
Packit Service a275fa
T_IN
Packit Service a275fa
	{
Packit Service a275fa
	    GV *gv = newGVgen("$Package");
Packit Service a275fa
	    if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
Packit Service a275fa
		sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
Packit Service a275fa
	    else
Packit Service a275fa
		$arg = &PL_sv_undef;
Packit Service a275fa
	}
Packit Service a275fa
T_INOUT
Packit Service a275fa
	{
Packit Service a275fa
	    GV *gv = newGVgen("$Package");
Packit Service a275fa
	    if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
Packit Service a275fa
		sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
Packit Service a275fa
	    else
Packit Service a275fa
		$arg = &PL_sv_undef;
Packit Service a275fa
	}
Packit Service a275fa
T_OUT
Packit Service a275fa
	{
Packit Service a275fa
	    GV *gv = newGVgen("$Package");
Packit Service a275fa
	    if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
Packit Service a275fa
		sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
Packit Service a275fa
	    else
Packit Service a275fa
		$arg = &PL_sv_undef;
Packit Service a275fa
	}
Packit Service a275fa
Packit Service a275fa
# SJP
Packit Service a275fa
Packit Service a275fa
TYPEMAP
Packit Service a275fa
pdl*	T_PDL
Packit Service a275fa
pdl *	T_PDL
Packit Service a275fa
Logical	T_IV
Packit Service a275fa
float	T_NV
Packit Service a275fa
Packit Service a275fa
INPUT
Packit Service a275fa
Packit Service a275fa
T_PDL
Packit Service a275fa
	$var = PDL->SvPDLV($arg)
Packit Service a275fa
Packit Service a275fa
Packit Service a275fa
OUTPUT
Packit Service a275fa
Packit Service a275fa
T_PDL
Packit Service a275fa
	PDL->SetSV_PDL($arg,$var);