mpir/demos/perl/typemap
2008-04-17 21:03:07 +00:00

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));