Upload Tizen:Base source
[external/gmp.git] / demos / perl / typemap
1 # GMP module external subroutine type mappings.
2
3 # Copyright 2001, 2003 Free Software Foundation, Inc.
4 #
5 # This file is part of the GNU MP Library.
6 #
7 # The GNU MP Library is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU Lesser General Public License as published
9 # by the Free Software Foundation; either version 3 of the License, or (at
10 # your option) any later version.
11 #
12 # The GNU MP Library is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
15 # License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public License
18 # along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
19
20
21 TYPEMAP
22 const_string            T_PV
23 const_string_assume     CONST_STRING_ASSUME
24 mpz                     MPZ
25 mpq                     MPQ
26 mpf                     MPF
27 mpz_assume              MPZ_ASSUME
28 mpq_assume              MPQ_ASSUME
29 mpf_assume              MPF_ASSUME
30 mpz_coerce              MPZ_COERCE
31 mpq_coerce              MPQ_COERCE
32 mpf_coerce_st0          MPF_COERCE_ST0
33 mpf_coerce_def          MPF_COERCE_DEF
34 randstate               RANDSTATE
35 ulong_coerce            ULONG_COERCE
36 malloced_string         MALLOCED_STRING
37 order_noswap            ORDER_NOSWAP
38 dummy                   DUMMY
39 # perl 5.005 doesn't have UV in its standard typemap, so use this instead
40 gmp_UV                  GMP_UV
41
42
43 INPUT
44 MPZ
45         class_or_croak ($arg, mpz_class); $var = SvMPZ($arg);
46 MPQ
47         class_or_croak ($arg, mpq_class); $var = SvMPQ($arg);
48 MPF
49         class_or_croak ($arg, mpf_class); $var = SvMPF($arg);
50 MPZ_ASSUME
51         MPZ_ASSUME ($var, $arg)
52 MPQ_ASSUME
53         MPQ_ASSUME ($var, $arg)
54 MPF_ASSUME
55         MPF_ASSUME ($var, $arg)
56 MPZ_COERCE
57         $var = coerce_mpz (tmp_mpz_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum}, $arg)
58 MPQ_COERCE
59         $var = coerce_mpq (tmp_mpq_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum}, $arg)
60 MPF_COERCE_ST0
61         /* precision follows ST(0) */
62         assert (sv_derived_from (ST(0), mpf_class));
63         $var = coerce_mpf (tmp_mpf_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum},
64                            $arg, mpf_get_prec (SvMPF(ST(0))))
65 MPF_COERCE_DEF
66         /* default precision used */
67         $var = coerce_mpf (tmp_mpf_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum},
68                            $arg, mpf_get_default_prec())
69 RANDSTATE
70         class_or_croak ($arg, rand_class); $var = SvRANDSTATE($arg);
71 ULONG_COERCE
72         $var = coerce_ulong ($arg)
73 ORDER_NOSWAP
74         assert ($arg != &PL_sv_yes);
75 DUMMY
76         /* dummy $var */
77 CONST_STRING_ASSUME
78         /* No need to check for SvPOKp and use SvPV, this mapping is
79            only used for overload_constant, which always gets literal
80            strings.  */
81         assert (SvPOK ($arg));
82         $var = SvPVX ($arg);
83
84
85 OUTPUT
86 MPZ
87     sv_bless (sv_setref_pv ($arg, NULL, $var), mpz_class_hv);
88 MPQ
89     sv_bless (sv_setref_pv ($arg, NULL, $var), mpq_class_hv);
90 MPF
91     sv_bless (sv_setref_pv ($arg, NULL, $var), mpf_class_hv);
92 RANDSTATE
93     sv_setref_pv ($arg, rand_class, $var);
94 MALLOCED_STRING
95     sv_usepvn_mg ($arg, $var, strlen($var));
96 GMP_UV
97     sv_setuv ($arg, (UV) ($var));