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 }