mirror of
https://git.FreeBSD.org/ports.git
synced 2024-10-19 19:59:43 +00:00
Add two upstream patches.
PR: ports/108855 Submitted by: maho
This commit is contained in:
parent
94334e27ad
commit
5ad08246dd
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=184466
@ -8,7 +8,7 @@
|
||||
|
||||
PORTNAME= libgmp
|
||||
PORTVERSION= 4.2.1
|
||||
PORTREVISION= 1
|
||||
PORTREVISION= 2
|
||||
CATEGORIES= math devel
|
||||
MASTER_SITES= ${MASTER_SITE_GNU}
|
||||
MASTER_SITE_SUBDIR= gmp
|
||||
@ -21,7 +21,7 @@ USE_AUTOTOOLS= libtool:15
|
||||
GNU_CONFIGURE= yes
|
||||
CONFIGURE_ENV= MAKEINFO="makeinfo --no-split"
|
||||
CONFIGURE_ARGS= --enable-cxx
|
||||
INSTALLS_SHLIB= yes
|
||||
USE_LDCONFIG= yes
|
||||
|
||||
INFO= gmp
|
||||
|
||||
|
513
math/gmp/files/patch-gmpxx.h
Normal file
513
math/gmp/files/patch-gmpxx.h
Normal file
@ -0,0 +1,513 @@
|
||||
--- gmpxx.h.orig Sat Apr 8 21:15:38 2006
|
||||
+++ gmpxx.h Wed Feb 7 07:56:24 2007
|
||||
@@ -1277,92 +1277,6 @@
|
||||
{ return -mpf_cmp_d(f, d); }
|
||||
};
|
||||
|
||||
-struct __gmp_ternary_addmul // z = w + v * u
|
||||
-{
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, mpz_srcptr u)
|
||||
- { mpz_set(z, w); mpz_addmul(z, v, u); }
|
||||
-
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, unsigned long int l)
|
||||
- { mpz_set(z, w); mpz_addmul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l, mpz_srcptr v)
|
||||
- { mpz_set(z, w); mpz_addmul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, signed long int l)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_addmul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_submul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, signed long int l, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_addmul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_submul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, double d)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_addmul(z, v, temp);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, double d, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_addmul(z, temp, v);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-struct __gmp_ternary_submul // z = w - v * u
|
||||
-{
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, mpz_srcptr u)
|
||||
- { mpz_set(z, w); mpz_submul(z, v, u); }
|
||||
-
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, unsigned long int l)
|
||||
- { mpz_set(z, w); mpz_submul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l, mpz_srcptr v)
|
||||
- { mpz_set(z, w); mpz_submul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, signed long int l)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_submul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_addmul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, signed long int l, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_submul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_addmul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, double d)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_submul(z, v, temp);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, double d, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_submul(z, temp, v);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
-};
|
||||
-
|
||||
struct __gmp_rand_function
|
||||
{
|
||||
static void eval(mpz_ptr z, gmp_randstate_t s, unsigned long int l)
|
||||
@@ -2862,417 +2776,6 @@
|
||||
__GMPZQ_DEFINE_EXPR(__gmp_binary_minus)
|
||||
|
||||
|
||||
-/* Integer ternary expressions of the kind `a+b*c' or `a*b+c' can be
|
||||
- evaluated directly via mpz_addmul */
|
||||
-
|
||||
-// a + b * c
|
||||
-#define __GMP_DEFINE_TERNARY_EXPR(eval_fun1, eval_fun2, eval_both) \
|
||||
- \
|
||||
-template <> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<mpz_class, T, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, T, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2()); } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<T, mpz_class, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<T, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpz_t, T>, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <mpz_class, __gmp_expr<mpz_t, T>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- temp.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpz_class, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, T>, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val1()); \
|
||||
- eval_both::eval(z, expr.val1.get_mpz_t(), temp.get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, U, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, T>, U, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val1()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), temp.get_mpz_t(), expr.val2.get_val2()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<T, __gmp_expr<mpz_t, U>, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <T, __gmp_expr<mpz_t, U>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1(), temp.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr<mpz_t, U>, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, T>, __gmp_expr<mpz_t, U>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val2.get_val1()); \
|
||||
- mpz_class temp2(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), temp1.get_mpz_t(), temp2.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val1); \
|
||||
- eval_both::eval(z, temp.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, U, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, U, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val1); \
|
||||
- eval_both::eval(z, temp.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<U, mpz_class, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<U, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val1); \
|
||||
- eval_both::eval(z, temp.get_mpz_t(), expr.val2.get_val1(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpz_t, U>, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <mpz_class, __gmp_expr<mpz_t, U>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- temp2.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, mpz_class, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, U>, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val1()); \
|
||||
- eval_both::eval(z, temp1.get_mpz_t(), temp2.get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U, class V> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, V, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, U>, V, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val1()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), temp2.get_mpz_t(), expr.val2.get_val2()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U, class V> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<U, __gmp_expr<mpz_t, V>, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <U, __gmp_expr<mpz_t, V>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), expr.val2.get_val1(), temp2.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U, class V> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, \
|
||||
- __gmp_expr<mpz_t, V>, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, U>, __gmp_expr<mpz_t, V>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val1()); \
|
||||
- mpz_class temp3(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), temp2.get_mpz_t(), temp3.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-};
|
||||
-
|
||||
-
|
||||
-__GMP_DEFINE_TERNARY_EXPR(__gmp_binary_multiplies, __gmp_binary_plus,
|
||||
- __gmp_ternary_addmul)
|
||||
-__GMP_DEFINE_TERNARY_EXPR(__gmp_binary_multiplies, __gmp_binary_minus,
|
||||
- __gmp_ternary_submul)
|
||||
|
||||
/**************** Macros for defining functions ****************/
|
||||
/* Results of operators and functions are instances of __gmp_expr<T, U>.
|
12
math/gmp/files/patch-mpz_set_d.c
Normal file
12
math/gmp/files/patch-mpz_set_d.c
Normal file
@ -0,0 +1,12 @@
|
||||
--- mpz/set_d.c.orig Tue Mar 14 16:57:54 2006
|
||||
+++ mpz/set_d.c Wed Feb 7 07:56:31 2007
|
||||
@@ -56,6 +56,9 @@
|
||||
if (ALLOC(r) < rn)
|
||||
_mpz_realloc (r, rn);
|
||||
|
||||
+ if (rn <= 0)
|
||||
+ rn = 0;
|
||||
+
|
||||
rp = PTR (r);
|
||||
|
||||
switch (rn)
|
@ -8,7 +8,7 @@
|
||||
|
||||
PORTNAME= libgmp
|
||||
PORTVERSION= 4.2.1
|
||||
PORTREVISION= 1
|
||||
PORTREVISION= 2
|
||||
CATEGORIES= math devel
|
||||
MASTER_SITES= ${MASTER_SITE_GNU}
|
||||
MASTER_SITE_SUBDIR= gmp
|
||||
@ -21,7 +21,7 @@ USE_AUTOTOOLS= libtool:15
|
||||
GNU_CONFIGURE= yes
|
||||
CONFIGURE_ENV= MAKEINFO="makeinfo --no-split"
|
||||
CONFIGURE_ARGS= --enable-cxx
|
||||
INSTALLS_SHLIB= yes
|
||||
USE_LDCONFIG= yes
|
||||
|
||||
INFO= gmp
|
||||
|
||||
|
513
math/libgmp4/files/patch-gmpxx.h
Normal file
513
math/libgmp4/files/patch-gmpxx.h
Normal file
@ -0,0 +1,513 @@
|
||||
--- gmpxx.h.orig Sat Apr 8 21:15:38 2006
|
||||
+++ gmpxx.h Wed Feb 7 07:56:24 2007
|
||||
@@ -1277,92 +1277,6 @@
|
||||
{ return -mpf_cmp_d(f, d); }
|
||||
};
|
||||
|
||||
-struct __gmp_ternary_addmul // z = w + v * u
|
||||
-{
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, mpz_srcptr u)
|
||||
- { mpz_set(z, w); mpz_addmul(z, v, u); }
|
||||
-
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, unsigned long int l)
|
||||
- { mpz_set(z, w); mpz_addmul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l, mpz_srcptr v)
|
||||
- { mpz_set(z, w); mpz_addmul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, signed long int l)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_addmul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_submul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, signed long int l, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_addmul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_submul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, double d)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_addmul(z, v, temp);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, double d, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_addmul(z, temp, v);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-struct __gmp_ternary_submul // z = w - v * u
|
||||
-{
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, mpz_srcptr u)
|
||||
- { mpz_set(z, w); mpz_submul(z, v, u); }
|
||||
-
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, unsigned long int l)
|
||||
- { mpz_set(z, w); mpz_submul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l, mpz_srcptr v)
|
||||
- { mpz_set(z, w); mpz_submul_ui(z, v, l); }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, signed long int l)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_submul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_addmul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, signed long int l, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_set(z, w);
|
||||
- if (l >= 0)
|
||||
- mpz_submul_ui(z, v, l);
|
||||
- else
|
||||
- mpz_addmul_ui(z, v, -l);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v, double d)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_submul(z, v, temp);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
- static void eval(mpz_ptr z, mpz_srcptr w, double d, mpz_srcptr v)
|
||||
- {
|
||||
- mpz_t temp;
|
||||
- mpz_init_set_d(temp, d);
|
||||
- mpz_set(z, w);
|
||||
- mpz_submul(z, temp, v);
|
||||
- mpz_clear(temp);
|
||||
- }
|
||||
-};
|
||||
-
|
||||
struct __gmp_rand_function
|
||||
{
|
||||
static void eval(mpz_ptr z, gmp_randstate_t s, unsigned long int l)
|
||||
@@ -2862,417 +2776,6 @@
|
||||
__GMPZQ_DEFINE_EXPR(__gmp_binary_minus)
|
||||
|
||||
|
||||
-/* Integer ternary expressions of the kind `a+b*c' or `a*b+c' can be
|
||||
- evaluated directly via mpz_addmul */
|
||||
-
|
||||
-// a + b * c
|
||||
-#define __GMP_DEFINE_TERNARY_EXPR(eval_fun1, eval_fun2, eval_both) \
|
||||
- \
|
||||
-template <> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<mpz_class, T, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, T, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2()); } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<T, mpz_class, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<T, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpz_t, T>, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <mpz_class, __gmp_expr<mpz_t, T>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- temp.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpz_class, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, T>, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val1()); \
|
||||
- eval_both::eval(z, expr.val1.get_mpz_t(), temp.get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, U, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, T>, U, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val1()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), temp.get_mpz_t(), expr.val2.get_val2()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<T, __gmp_expr<mpz_t, U>, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <T, __gmp_expr<mpz_t, U>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), expr.val2.get_val1(), temp.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr \
|
||||
-<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr<mpz_t, U>, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef mpz_class val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, T>, __gmp_expr<mpz_t, U>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val2.get_val1()); \
|
||||
- mpz_class temp2(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, expr.val1.get_mpz_t(), temp1.get_mpz_t(), temp2.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val1); \
|
||||
- eval_both::eval(z, temp.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, U, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<mpz_class, U, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val1); \
|
||||
- eval_both::eval(z, temp.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- expr.val2.get_val2()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<U, mpz_class, eval_fun1> >, \
|
||||
- eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr \
|
||||
- <mpz_t, __gmp_binary_expr<U, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp(expr.val1); \
|
||||
- eval_both::eval(z, temp.get_mpz_t(), expr.val2.get_val1(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpz_t, U>, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <mpz_class, __gmp_expr<mpz_t, U>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), expr.val2.get_val1().get_mpz_t(), \
|
||||
- temp2.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, mpz_class, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, U>, mpz_class, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val1()); \
|
||||
- eval_both::eval(z, temp1.get_mpz_t(), temp2.get_mpz_t(), \
|
||||
- expr.val2.get_val2().get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U, class V> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, V, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, U>, V, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val1()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), temp2.get_mpz_t(), expr.val2.get_val2()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U, class V> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<U, __gmp_expr<mpz_t, V>, \
|
||||
- eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <U, __gmp_expr<mpz_t, V>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), expr.val2.get_val1(), temp2.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-}; \
|
||||
- \
|
||||
-template <class T, class U, class V> \
|
||||
-class __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, \
|
||||
- __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, \
|
||||
- __gmp_expr<mpz_t, V>, eval_fun1> >, eval_fun2> > \
|
||||
-{ \
|
||||
-private: \
|
||||
- typedef __gmp_expr<mpz_t, T> val1_type; \
|
||||
- typedef __gmp_expr<mpz_t, __gmp_binary_expr \
|
||||
- <__gmp_expr<mpz_t, U>, __gmp_expr<mpz_t, V>, eval_fun1> > val2_type; \
|
||||
- \
|
||||
- __gmp_binary_expr<val1_type, val2_type, eval_fun2> expr; \
|
||||
-public: \
|
||||
- __gmp_expr(const val1_type &val1, const val2_type &val2) \
|
||||
- : expr(val1, val2) { } \
|
||||
- void eval(mpz_ptr z) const \
|
||||
- { \
|
||||
- mpz_class temp1(expr.val1); \
|
||||
- mpz_class temp2(expr.val2.get_val1()); \
|
||||
- mpz_class temp3(expr.val2.get_val2()); \
|
||||
- eval_both::eval \
|
||||
- (z, temp1.get_mpz_t(), temp2.get_mpz_t(), temp3.get_mpz_t()); \
|
||||
- } \
|
||||
- const val1_type & get_val1() const { return expr.val1; } \
|
||||
- const val2_type & get_val2() const { return expr.val2; } \
|
||||
- unsigned long int get_prec() const { return mpf_get_default_prec(); } \
|
||||
-};
|
||||
-
|
||||
-
|
||||
-__GMP_DEFINE_TERNARY_EXPR(__gmp_binary_multiplies, __gmp_binary_plus,
|
||||
- __gmp_ternary_addmul)
|
||||
-__GMP_DEFINE_TERNARY_EXPR(__gmp_binary_multiplies, __gmp_binary_minus,
|
||||
- __gmp_ternary_submul)
|
||||
|
||||
/**************** Macros for defining functions ****************/
|
||||
/* Results of operators and functions are instances of __gmp_expr<T, U>.
|
12
math/libgmp4/files/patch-mpz_set_d.c
Normal file
12
math/libgmp4/files/patch-mpz_set_d.c
Normal file
@ -0,0 +1,12 @@
|
||||
--- mpz/set_d.c.orig Tue Mar 14 16:57:54 2006
|
||||
+++ mpz/set_d.c Wed Feb 7 07:56:31 2007
|
||||
@@ -56,6 +56,9 @@
|
||||
if (ALLOC(r) < rn)
|
||||
_mpz_realloc (r, rn);
|
||||
|
||||
+ if (rn <= 0)
|
||||
+ rn = 0;
|
||||
+
|
||||
rp = PTR (r);
|
||||
|
||||
switch (rn)
|
Loading…
Reference in New Issue
Block a user