typemap
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:3k
源码类别:

数学计算

开发平台:

Unix_Linux

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