Add two upstream patches.

PR:		ports/108855
Submitted by:	maho
This commit is contained in:
Alex Dupre 2007-02-07 07:00:22 +00:00
parent 94334e27ad
commit 5ad08246dd
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=184466
6 changed files with 1054 additions and 4 deletions

View File

@ -8,7 +8,7 @@
PORTNAME= libgmp PORTNAME= libgmp
PORTVERSION= 4.2.1 PORTVERSION= 4.2.1
PORTREVISION= 1 PORTREVISION= 2
CATEGORIES= math devel CATEGORIES= math devel
MASTER_SITES= ${MASTER_SITE_GNU} MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= gmp MASTER_SITE_SUBDIR= gmp
@ -21,7 +21,7 @@ USE_AUTOTOOLS= libtool:15
GNU_CONFIGURE= yes GNU_CONFIGURE= yes
CONFIGURE_ENV= MAKEINFO="makeinfo --no-split" CONFIGURE_ENV= MAKEINFO="makeinfo --no-split"
CONFIGURE_ARGS= --enable-cxx CONFIGURE_ARGS= --enable-cxx
INSTALLS_SHLIB= yes USE_LDCONFIG= yes
INFO= gmp INFO= gmp

View 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>.

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

View File

@ -8,7 +8,7 @@
PORTNAME= libgmp PORTNAME= libgmp
PORTVERSION= 4.2.1 PORTVERSION= 4.2.1
PORTREVISION= 1 PORTREVISION= 2
CATEGORIES= math devel CATEGORIES= math devel
MASTER_SITES= ${MASTER_SITE_GNU} MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= gmp MASTER_SITE_SUBDIR= gmp
@ -21,7 +21,7 @@ USE_AUTOTOOLS= libtool:15
GNU_CONFIGURE= yes GNU_CONFIGURE= yes
CONFIGURE_ENV= MAKEINFO="makeinfo --no-split" CONFIGURE_ENV= MAKEINFO="makeinfo --no-split"
CONFIGURE_ARGS= --enable-cxx CONFIGURE_ARGS= --enable-cxx
INSTALLS_SHLIB= yes USE_LDCONFIG= yes
INFO= gmp INFO= gmp

View 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>.

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