1 #
   2 # Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
   3 #
   4 
   5 #
   6 # Typemap for common exacct types.
   7 #
   8 # Note that the Exacct types need to end in REF to make xsubpp do
   9 # the right thing.
  10 #
  11 
  12 TYPEMAP
  13         idtype_t                T_IV
  14         id_t                    T_IV
  15         taskid_t                T_IV
  16         projid_t                T_IV
  17         xs_ea_object_t *        T_XSEAOBJREF
  18         ea_file_t *             T_EAFILEREF
  19 
  20 INPUT
  21 
  22 #
  23 # xs_ea_object_t must be blessed into either ::Object::Item or ::Object::Group.
  24 # The underlying value is a pointer masquerading as an IV.
  25 #
  26 T_XSEAOBJREF
  27         {
  28                 SV *sv = SvRV($arg);
  29                 HV *stash = sv ? SvSTASH(sv) : NULL;
  30                 if (stash == Sun_Solaris_Exacct_Object_Item_stash ||
  31                     stash == Sun_Solaris_Exacct_Object_Group_stash) {
  32                         IV tmp = SvIV(sv);
  33                         $var = INT2PTR($type, tmp);
  34                 } else {
  35                         croak(\"$var is not of type $Package\");
  36                 }
  37         }
  38 
  39 #
  40 # ea_file_t must be blessed into ::File.
  41 # The underlying value is a pointer masquerading as an IV.
  42 #
  43 T_EAFILEREF
  44         {
  45                 SV *sv = SvRV($arg);
  46                 HV *stash = sv ? SvSTASH(sv) : NULL;
  47                 if (stash == ${my $p=$Package.'_stash'; $p=~s/::/_/g; \$p}) {
  48                         IV tmp = SvIV(sv);
  49                         $var = INT2PTR($type, tmp);
  50                 } else {
  51                         croak(\"$var is not of type $Package\");
  52                 }
  53         }
  54 
  55 OUTPUT
  56 
  57 T_XSEAOBJREF
  58         if ($var == NULL) {
  59                 sv_setsv($arg, &PL_sv_undef);
  60         } else {
  61                 sv_setiv(newSVrv($arg, NULL), PTR2IV($var));
  62                 sv_bless($arg, ${my $p=$Package.'_stash'; $p=~s/::/_/g; \$p});
  63                 SvREADONLY_on(SvRV($arg));
  64         }
  65 
  66 T_EAFILEREF
  67         if ($var == NULL) {
  68                 sv_setsv($arg, &PL_sv_undef);
  69         } else {
  70                 sv_setiv(newSVrv($arg, NULL), PTR2IV($var));
  71                 sv_bless($arg, ${my $p=$Package.'_stash'; $p=~s/::/_/g; \$p});
  72                 SvREADONLY_on(SvRV($arg));
  73         }