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 }