Blame demos/perl/typemap

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