100 lines
3.0 KiB
Plaintext
100 lines
3.0 KiB
Plaintext
|
# 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 2.1 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; see the file COPYING.LIB. If not, write to
|
||
|
# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
|
# MA 02110-1301, USA.
|
||
|
|
||
|
|
||
|
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));
|