# GMP module external subroutine type mappings. # Copyright 2001, 2003 Free Software Foundation, Inc. # # This file is part of the GNU MP Library. # # The GNU MP Library is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation; either version 3 of the License, or (at # your option) any later version. # # The GNU MP Library is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. TYPEMAP const_string T_PV const_string_assume CONST_STRING_ASSUME mpz MPZ mpq MPQ mpf MPF mpz_assume MPZ_ASSUME mpq_assume MPQ_ASSUME mpf_assume MPF_ASSUME mpz_coerce MPZ_COERCE mpq_coerce MPQ_COERCE mpf_coerce_st0 MPF_COERCE_ST0 mpf_coerce_def MPF_COERCE_DEF randstate RANDSTATE ulong_coerce ULONG_COERCE malloced_string MALLOCED_STRING order_noswap ORDER_NOSWAP dummy DUMMY # perl 5.005 doesn't have UV in its standard typemap, so use this instead gmp_UV GMP_UV INPUT MPZ class_or_croak ($arg, mpz_class); $var = SvMPZ($arg); MPQ class_or_croak ($arg, mpq_class); $var = SvMPQ($arg); MPF class_or_croak ($arg, mpf_class); $var = SvMPF($arg); MPZ_ASSUME MPZ_ASSUME ($var, $arg) MPQ_ASSUME MPQ_ASSUME ($var, $arg) MPF_ASSUME MPF_ASSUME ($var, $arg) MPZ_COERCE $var = coerce_mpz (tmp_mpz_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum}, $arg) MPQ_COERCE $var = coerce_mpq (tmp_mpq_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum}, $arg) MPF_COERCE_ST0 /* precision follows ST(0) */ assert (sv_derived_from (ST(0), mpf_class)); $var = coerce_mpf (tmp_mpf_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum}, $arg, mpf_get_prec (SvMPF(ST(0)))) MPF_COERCE_DEF /* default precision used */ $var = coerce_mpf (tmp_mpf_${(my $stnum=$arg)=~s/[^0-9]//g;\$stnum}, $arg, mpf_get_default_prec()) RANDSTATE class_or_croak ($arg, rand_class); $var = SvRANDSTATE($arg); ULONG_COERCE $var = coerce_ulong ($arg) ORDER_NOSWAP assert ($arg != &PL_sv_yes); DUMMY /* dummy $var */ CONST_STRING_ASSUME /* No need to check for SvPOKp and use SvPV, this mapping is only used for overload_constant, which always gets literal strings. */ assert (SvPOK ($arg)); $var = SvPVX ($arg); OUTPUT MPZ sv_bless (sv_setref_pv ($arg, NULL, $var), mpz_class_hv); MPQ sv_bless (sv_setref_pv ($arg, NULL, $var), mpq_class_hv); MPF sv_bless (sv_setref_pv ($arg, NULL, $var), mpf_class_hv); RANDSTATE sv_setref_pv ($arg, rand_class, $var); MALLOCED_STRING sv_usepvn_mg ($arg, $var, strlen($var)); GMP_UV sv_setuv ($arg, (UV) ($var));