typemap revision c227543f6890bd6f2054360ec1820bfef8132431
#
# Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
#
#
# Typemap for common exacct types.
#
# Note that the Exacct types need to end in REF to make xsubpp do
# the right thing.
#
TYPEMAP
idtype_t T_IV
id_t T_IV
taskid_t T_IV
projid_t T_IV
xs_ea_object_t * T_XSEAOBJREF
ea_file_t * T_EAFILEREF
INPUT
#
# xs_ea_object_t must be blessed into either ::Object::Item or ::Object::Group.
# The underlying value is a pointer masquerading as an IV.
#
T_XSEAOBJREF
{
SV *sv = SvRV($arg);
HV *stash = sv ? SvSTASH(sv) : NULL;
if (stash == Sun_Solaris_Exacct_Object_Item_stash ||
stash == Sun_Solaris_Exacct_Object_Group_stash) {
IV tmp = SvIV(sv);
$var = INT2PTR($type, tmp);
} else {
croak(\"$var is not of type $Package\");
}
}
#
# ea_file_t must be blessed into ::File.
# The underlying value is a pointer masquerading as an IV.
#
T_EAFILEREF
{
SV *sv = SvRV($arg);
HV *stash = sv ? SvSTASH(sv) : NULL;
if (stash == ${my $p=$Package.'_stash'; $p=~s/::/_/g; \$p}) {
IV tmp = SvIV(sv);
$var = INT2PTR($type, tmp);
} else {
croak(\"$var is not of type $Package\");
}
}
OUTPUT
T_XSEAOBJREF
if ($var == NULL) {
sv_setsv($arg, &PL_sv_undef);
} else {
sv_setiv(newSVrv($arg, NULL), PTR2IV($var));
sv_bless($arg, ${my $p=$Package.'_stash'; $p=~s/::/_/g; \$p});
SvREADONLY_on(SvRV($arg));
}
T_EAFILEREF
if ($var == NULL) {
sv_setsv($arg, &PL_sv_undef);
} else {
sv_setiv(newSVrv($arg, NULL), PTR2IV($var));
sv_bless($arg, ${my $p=$Package.'_stash'; $p=~s/::/_/g; \$p});
SvREADONLY_on(SvRV($arg));
}