diff options
Diffstat (limited to 'Build/source/libs/gmp/gmp-src/gmpxx.h')
-rw-r--r-- | Build/source/libs/gmp/gmp-src/gmpxx.h | 311 |
1 files changed, 290 insertions, 21 deletions
diff --git a/Build/source/libs/gmp/gmp-src/gmpxx.h b/Build/source/libs/gmp/gmp-src/gmpxx.h index 58e87005442..0342116ef6f 100644 --- a/Build/source/libs/gmp/gmp-src/gmpxx.h +++ b/Build/source/libs/gmp/gmp-src/gmpxx.h @@ -1,6 +1,7 @@ /* gmpxx.h -- C++ class wrapper for GMP types. -*- C++ -*- -Copyright 2001-2003, 2006, 2008, 2011, 2012 Free Software Foundation, Inc. +Copyright 2001-2003, 2006, 2008, 2011-2015, 2018 Free Software +Foundation, Inc. This file is part of the GNU MP Library. @@ -220,6 +221,11 @@ struct __gmp_binary_plus { if (q != r) mpq_set(q, r); } + else if (__GMPXX_CONSTANT(l) && l == 1) + { + mpz_add (mpq_numref(q), mpq_numref(r), mpq_denref(r)); + if (q != r) mpz_set(mpq_denref(q), mpq_denref(r)); + } else { if (q == r) @@ -339,6 +345,11 @@ struct __gmp_binary_minus { if (q != r) mpq_set(q, r); } + else if (__GMPXX_CONSTANT(l) && l == 1) + { + mpz_sub (mpq_numref(q), mpq_numref(r), mpq_denref(r)); + if (q != r) mpz_set(mpq_denref(q), mpq_denref(r)); + } else { if (q == r) @@ -689,7 +700,17 @@ struct __gmp_binary_divides } } static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) - { __GMPXX_TMPQ_UI; mpq_div (q, temp, r); } + { + if (__GMPXX_CONSTANT_TRUE(l == 0)) + mpq_set_ui(q, 0, 1); + else if (__GMPXX_CONSTANT_TRUE(l == 1)) + mpq_inv(q, r); + else + { + __GMPXX_TMPQ_UI; + mpq_div (q, temp, r); + } + } static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) { if (__GMPXX_CONSTANT_TRUE(l >= 0)) @@ -706,7 +727,22 @@ struct __gmp_binary_divides } } static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) - { __GMPXX_TMPQ_SI; mpq_div (q, temp, r); } + { + if (__GMPXX_CONSTANT_TRUE(l == 0)) + mpq_set_ui(q, 0, 1); + else if (__GMPXX_CONSTANT_TRUE(l == 1)) + mpq_inv(q, r); + else if (__GMPXX_CONSTANT_TRUE(l == -1)) + { + mpq_inv(q, r); + mpq_neg(q, q); + } + else + { + __GMPXX_TMPQ_SI; + mpq_div (q, temp, r); + } + } static void eval(mpq_ptr q, mpq_srcptr r, double d) { __GMPXX_TMPQ_D; mpq_div (q, r, temp); } static void eval(mpq_ptr q, double d, mpq_srcptr r) @@ -946,11 +982,15 @@ struct __gmp_binary_equal { return mpq_equal(q, r) != 0; } static bool eval(mpq_srcptr q, unsigned long int l) - { return mpq_cmp_ui(q, l, 1) == 0; } + { return ((__GMPXX_CONSTANT(l) && l == 0) || + mpz_cmp_ui(mpq_denref(q), 1) == 0) && + mpz_cmp_ui(mpq_numref(q), l) == 0; } static bool eval(unsigned long int l, mpq_srcptr q) { return eval(q, l); } static bool eval(mpq_srcptr q, signed long int l) - { return mpq_cmp_si(q, l, 1) == 0; } + { return ((__GMPXX_CONSTANT(l) && l == 0) || + mpz_cmp_ui(mpq_denref(q), 1) == 0) && + mpz_cmp_si(mpq_numref(q), l) == 0; } static bool eval(signed long int l, mpq_srcptr q) { return eval(q, l); } static bool eval(mpq_srcptr q, double d) @@ -958,7 +998,7 @@ struct __gmp_binary_equal static bool eval(double d, mpq_srcptr q) { return eval(q, d); } static bool eval(mpq_srcptr q, mpz_srcptr z) - { return mpq_cmp_z(q, z) == 0; } + { return mpz_cmp_ui(mpq_denref(q), 1) == 0 && mpz_cmp(mpq_numref(q), z) == 0; } static bool eval(mpz_srcptr z, mpq_srcptr q) { return eval(q, z); } @@ -1194,6 +1234,78 @@ struct __gmp_rand_function { mpf_urandomb(f, s, prec); } }; +struct __gmp_fac_function +{ + static void eval(mpz_ptr z, unsigned long l) { mpz_fac_ui(z, l); } + static void eval(mpz_ptr z, signed long l) + { + if (l < 0) + throw std::domain_error ("factorial(negative)"); + eval(z, static_cast<unsigned long>(l)); + } + static void eval(mpz_ptr z, mpz_srcptr w) + { + if (!mpz_fits_ulong_p(w)) + { + if (mpz_sgn(w) < 0) + throw std::domain_error ("factorial(negative)"); + else + throw std::bad_alloc(); // or std::overflow_error ("factorial")? + } + eval(z, mpz_get_ui(w)); + } + static void eval(mpz_ptr z, double d) + { __GMPXX_TMPZ_D; eval (z, temp); } +}; + +struct __gmp_primorial_function +{ + static void eval(mpz_ptr z, unsigned long l) { mpz_primorial_ui(z, l); } + static void eval(mpz_ptr z, signed long l) + { + if (l < 0) + throw std::domain_error ("primorial(negative)"); + eval(z, static_cast<unsigned long>(l)); + } + static void eval(mpz_ptr z, mpz_srcptr w) + { + if (!mpz_fits_ulong_p(w)) + { + if (mpz_sgn(w) < 0) + throw std::domain_error ("primorial(negative)"); + else + throw std::bad_alloc(); // or std::overflow_error ("primorial")? + } + eval(z, mpz_get_ui(w)); + } + static void eval(mpz_ptr z, double d) + { __GMPXX_TMPZ_D; eval (z, temp); } +}; + +struct __gmp_fib_function +{ + static void eval(mpz_ptr z, unsigned long l) { mpz_fib_ui(z, l); } + static void eval(mpz_ptr z, signed long l) + { + if (l < 0) + { + eval(z, -static_cast<unsigned long>(l)); + if ((l & 1) == 0) + mpz_neg(z, z); + } + else + eval(z, static_cast<unsigned long>(l)); + } + static void eval(mpz_ptr z, mpz_srcptr w) + { + if (!mpz_fits_slong_p(w)) + throw std::bad_alloc(); // or std::overflow_error ("fibonacci")? + eval(z, mpz_get_si(w)); + } + static void eval(mpz_ptr z, double d) + { __GMPXX_TMPZ_D; eval (z, temp); } +}; + /**************** Auxiliary classes ****************/ @@ -1423,6 +1535,38 @@ __GMPN_DECLARE_COMPOUND_OPERATOR(fun) __gmp_expr & operator=(float f) { assign_d(f); return *this; } \ __gmp_expr & operator=(double d) { assign_d(d); return *this; } +#define __GMPP_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +template <class U> \ +static __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> > \ +fun(const __gmp_expr<T, U> &expr); + +#define __GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, bigtype) \ +static inline __gmp_expr<T, __gmp_unary_expr<bigtype, eval_fun> > \ +fun(type expr); + +#define __GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, signed long) +#define __GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, unsigned long) +#define __GMPND_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, double) + +#define __GMPN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed char) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned char) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed int) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned int) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed short int) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned short int) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed long int) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned long int) \ +__GMPND_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, float) \ +__GMPND_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, double) + +#define __GMP_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPP_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) + /**************** mpz_class -- wrapper for mpz_t ****************/ template <> @@ -1485,11 +1629,11 @@ public: mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } // constructors and destructor - __gmp_expr() { mpz_init(mp); } + __gmp_expr() __GMPXX_NOEXCEPT { mpz_init(mp); } __gmp_expr(const __gmp_expr &z) { mpz_init_set(mp, z.mp); } #if __GMPXX_USE_CXX11 - __gmp_expr(__gmp_expr &&z) + __gmp_expr(__gmp_expr &&z) noexcept { *mp = *z.mp; mpz_init(z.mp); } #endif template <class T> @@ -1603,6 +1747,10 @@ public: __GMP_DECLARE_INCREMENT_OPERATOR(operator++) __GMP_DECLARE_INCREMENT_OPERATOR(operator--) + + __GMP_DECLARE_UNARY_STATIC_MEMFUN(mpz_t, factorial, __gmp_fac_function) + __GMP_DECLARE_UNARY_STATIC_MEMFUN(mpz_t, primorial, __gmp_primorial_function) + __GMP_DECLARE_UNARY_STATIC_MEMFUN(mpz_t, fibonacci, __gmp_fib_function) }; typedef __gmp_expr<mpz_t, mpz_t> mpz_class; @@ -1980,7 +2128,7 @@ public: // bool fits_ldouble_p() const { return mpf_fits_ldouble_p(mp); } #if __GMPXX_USE_CXX11 - explicit operator bool() const { return mp->_mp_size != 0; } + explicit operator bool() const { return mpf_sgn(mp) != 0; } #endif // compound assignments @@ -2791,6 +2939,17 @@ fun(const __gmp_expr<T, U> &expr) \ return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> >(expr); \ } +// variant that only works for one of { mpz, mpq, mpf } + +#define __GMP_DEFINE_UNARY_FUNCTION_1(T, fun, eval_fun) \ + \ +template <class U> \ +inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> > \ +fun(const __gmp_expr<T, U> &expr) \ +{ \ + return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> >(expr); \ +} + #define __GMP_DEFINE_UNARY_TYPE_FUNCTION(type, fun, eval_fun) \ \ template <class T, class U> \ @@ -2864,6 +3023,69 @@ __GMPND_DEFINE_BINARY_FUNCTION(fun, eval_fun, double) \ __GMPP_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ __GMPN_DEFINE_BINARY_FUNCTION(fun, eval_fun) +// variant that only works for one of { mpz, mpq, mpf } + +#define __GMPP_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ + \ +template <class U, class W> \ +inline __gmp_expr<T, \ +__gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, W>, eval_fun> > \ +fun(const __gmp_expr<T, U> &expr1, const __gmp_expr<T, W> &expr2) \ +{ \ + return __gmp_expr<T, \ + __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, W>, eval_fun> > \ + (expr1, expr2); \ +} + +#define __GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, bigtype) \ + \ +template <class U> \ +inline __gmp_expr \ +<T, __gmp_binary_expr<__gmp_expr<T, U>, bigtype, eval_fun> > \ +fun(const __gmp_expr<T, U> &expr, type t) \ +{ \ + return __gmp_expr \ + <T, __gmp_binary_expr<__gmp_expr<T, U>, bigtype, eval_fun> >(expr, t); \ +} \ + \ +template <class U> \ +inline __gmp_expr \ +<T, __gmp_binary_expr<bigtype, __gmp_expr<T, U>, eval_fun> > \ +fun(type t, const __gmp_expr<T, U> &expr) \ +{ \ + return __gmp_expr \ + <T, __gmp_binary_expr<bigtype, __gmp_expr<T, U>, eval_fun> >(t, expr); \ +} + +#define __GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, signed long int) + +#define __GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, unsigned long int) + +#define __GMPND_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, double) + +#define __GMPNLD_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, long double) + +#define __GMPN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed char) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned char) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed int) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned int) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed short int) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned short int) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed long int) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned long int) \ +__GMPND_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, float) \ +__GMPND_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, double) \ +/* __GMPNLD_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, long double) */ + +#define __GMP_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ +__GMPP_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ +__GMPN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) + #define __GMP_DEFINE_BINARY_FUNCTION_UI(fun, eval_fun) \ \ @@ -3046,6 +3268,44 @@ __GMP_DEFINE_INCREMENT_OPERATOR(mpq, fun, eval_fun) __GMP_DEFINE_INCREMENT_OPERATOR(mpf, fun, eval_fun) +#define __GMPP_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +template <class U> \ +__gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> > \ +fun(const __gmp_expr<T, U> &expr) \ +{ \ + return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> >(expr); \ +} + +#define __GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, bigtype) \ +inline __gmp_expr<T, __gmp_unary_expr<bigtype, eval_fun> > \ +fun(type expr) \ +{ \ + return __gmp_expr<T, __gmp_unary_expr<bigtype, eval_fun> >(expr); \ +} + +#define __GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, signed long) +#define __GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, unsigned long) +#define __GMPND_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, double) + +#define __GMPN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed char) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned char) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed int) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned int) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed short int) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned short int) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed long int) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned long int) \ +__GMPND_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, float) \ +__GMPND_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, double) \ + +#define __GMP_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPP_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ + /**************** Arithmetic operators and functions ****************/ @@ -3053,16 +3313,16 @@ __GMP_DEFINE_INCREMENT_OPERATOR(mpf, fun, eval_fun) __GMP_DEFINE_UNARY_FUNCTION(operator+, __gmp_unary_plus) __GMP_DEFINE_UNARY_FUNCTION(operator-, __gmp_unary_minus) -__GMP_DEFINE_UNARY_FUNCTION(operator~, __gmp_unary_com) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, operator~, __gmp_unary_com) __GMP_DEFINE_BINARY_FUNCTION(operator+, __gmp_binary_plus) __GMP_DEFINE_BINARY_FUNCTION(operator-, __gmp_binary_minus) __GMP_DEFINE_BINARY_FUNCTION(operator*, __gmp_binary_multiplies) __GMP_DEFINE_BINARY_FUNCTION(operator/, __gmp_binary_divides) -__GMP_DEFINE_BINARY_FUNCTION(operator%, __gmp_binary_modulus) -__GMP_DEFINE_BINARY_FUNCTION(operator&, __gmp_binary_and) -__GMP_DEFINE_BINARY_FUNCTION(operator|, __gmp_binary_ior) -__GMP_DEFINE_BINARY_FUNCTION(operator^, __gmp_binary_xor) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator%, __gmp_binary_modulus) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator&, __gmp_binary_and) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator|, __gmp_binary_ior) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator^, __gmp_binary_xor) __GMP_DEFINE_BINARY_FUNCTION_UI(operator<<, __gmp_binary_lshift) __GMP_DEFINE_BINARY_FUNCTION_UI(operator>>, __gmp_binary_rshift) @@ -3075,13 +3335,17 @@ __GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator>, __gmp_binary_greater) __GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator>=, ! __gmp_binary_less) __GMP_DEFINE_UNARY_FUNCTION(abs, __gmp_abs_function) -__GMP_DEFINE_UNARY_FUNCTION(trunc, __gmp_trunc_function) -__GMP_DEFINE_UNARY_FUNCTION(floor, __gmp_floor_function) -__GMP_DEFINE_UNARY_FUNCTION(ceil, __gmp_ceil_function) -__GMP_DEFINE_UNARY_FUNCTION(sqrt, __gmp_sqrt_function) -__GMP_DEFINE_BINARY_FUNCTION(hypot, __gmp_hypot_function) -__GMP_DEFINE_BINARY_FUNCTION(gcd, __gmp_gcd_function) -__GMP_DEFINE_BINARY_FUNCTION(lcm, __gmp_lcm_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, trunc, __gmp_trunc_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, floor, __gmp_floor_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, ceil, __gmp_ceil_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, sqrt, __gmp_sqrt_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, sqrt, __gmp_sqrt_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, factorial, __gmp_fac_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, primorial, __gmp_primorial_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, fibonacci, __gmp_fib_function) +__GMP_DEFINE_BINARY_FUNCTION_1(mpf_t, hypot, __gmp_hypot_function) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, gcd, __gmp_gcd_function) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, lcm, __gmp_lcm_function) __GMP_DEFINE_UNARY_TYPE_FUNCTION(int, sgn, __gmp_sgn_function) __GMP_DEFINE_BINARY_TYPE_FUNCTION(int, cmp, __gmp_cmp_function) @@ -3108,6 +3372,10 @@ __GMPZ_DEFINE_COMPOUND_OPERATOR_UI(operator>>=, __gmp_binary_rshift) __GMPZ_DEFINE_INCREMENT_OPERATOR(operator++, __gmp_unary_increment) __GMPZ_DEFINE_INCREMENT_OPERATOR(operator--, __gmp_unary_decrement) +__GMP_DEFINE_UNARY_STATIC_MEMFUN(mpz_t, mpz_class::factorial, __gmp_fac_function) +__GMP_DEFINE_UNARY_STATIC_MEMFUN(mpz_t, mpz_class::primorial, __gmp_primorial_function) +__GMP_DEFINE_UNARY_STATIC_MEMFUN(mpz_t, mpz_class::fibonacci, __gmp_fib_function) + // member operators for mpq_class __GMPQ_DEFINE_COMPOUND_OPERATOR(operator+=, __gmp_binary_plus) @@ -3381,6 +3649,7 @@ namespace std { #undef __GMPZQ_DEFINE_EXPR +#undef __GMP_DEFINE_UNARY_FUNCTION_1 #undef __GMP_DEFINE_UNARY_FUNCTION #undef __GMP_DEFINE_UNARY_TYPE_FUNCTION |