BOOST_MP_FORCEINLINE number<B, et_off> operator + (const number<B, et_off>& a, const number<B, et_off>& b) { number<B, et_off> result; using default_ops::eval_add; eval_add(result.backend(), a.backend(), b.backend()); return BOOST_MP_MOVE(result); }
BOOST_MP_FORCEINLINE typename enable_if_c<number_category<B>::value == number_kind_integer, number<B, et_off> >::type operator & (const number<B, et_off>& a, const number<B, et_off>& b) { number<B, et_off> result; using default_ops::eval_bitwise_and; eval_bitwise_and(result.backend(), a.backend(), b.backend()); return BOOST_MP_MOVE(result); }
BOOST_MP_FORCEINLINE typename enable_if_c<number_category<B>::value == number_kind_integer, number<B, et_off> >::type operator % (const number<B, et_off>& a, const number<B, et_off>& b) { detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(a, b); number<B, et_off> result; using default_ops::eval_modulus; eval_modulus(result.backend(), a.backend(), b.backend()); return result; }
BOOST_MP_FORCEINLINE number<B, et_off> operator - (const number<B, et_off>& a, const number<B, et_off>& b) { detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(a, b); number<B, et_off> result; using default_ops::eval_subtract; eval_subtract(result.backend(), a.backend(), b.backend()); return result; }
BOOST_MP_FORCEINLINE number<B, et_off> operator / (number<B, et_off>&& a, const number<B, et_off>& b) { using default_ops::eval_divide; detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(a, b); eval_divide(a.backend(), b.backend()); return static_cast<number<B, et_off>&&>(a); }
BOOST_MP_FORCEINLINE number<B, et_off> operator * (const number<B, et_off>& a, number<B, et_off>&& b) { using default_ops::eval_multiply; detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(a, b); eval_multiply(b.backend(), a.backend()); return static_cast<number<B, et_off>&&>(b); }
BOOST_MP_FORCEINLINE number<B, et_off> operator ~ (const number<B, et_off>& v) { detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(v); number<B, et_off> result; eval_complement(result.backend(), v.backend()); return result; }
BOOST_MP_FORCEINLINE typename enable_if<is_signed_number<B>, number<B, et_off> >::type operator - (const number<B, et_off>& a, number<B, et_off>&& b) { using default_ops::eval_subtract; eval_subtract(b.backend(), a.backend()); b.backend().negate(); return static_cast<number<B, et_off>&&>(b); }
BOOST_MP_FORCEINLINE typename enable_if<is_signed_number<B>, number<B, et_off> >::type operator - (const number<B, et_off>& a, number<B, et_off>&& b) { using default_ops::eval_subtract; detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(a, b); eval_subtract(b.backend(), a.backend()); b.backend().negate(); return static_cast<number<B, et_off>&&>(b); }
BOOST_MP_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type operator & (const number<B, et_off>& a, const V& b) { number<B, et_off> result; using default_ops::eval_bitwise_and; eval_bitwise_and(result.backend(), a.backend(), number<B, et_off>::canonical_value(b)); return BOOST_MP_MOVE(result); }
BOOST_MP_FORCEINLINE typename enable_if_c<is_compatible_arithmetic_type<V, number<B, et_off> >::value && (number_category<B>::value == number_kind_integer), number<B, et_off> >::type operator & (const V& a, const number<B, et_off>& b) { number<B, et_off> result; using default_ops::eval_bitwise_and; eval_bitwise_and(result.backend(), b.backend(), number<B, et_off>::canonical_value(a)); return BOOST_MP_MOVE(result); }
BOOST_MP_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type operator - (const V& a, const number<B, et_off>& b) { number<B, et_off> result; using default_ops::eval_subtract; eval_subtract(result.backend(), number<B, et_off>::canonical_value(a), b.backend()); return BOOST_MP_MOVE(result); }
BOOST_MP_FORCEINLINE typename enable_if_c<is_compatible_arithmetic_type<V, number<B, et_off> >::value && (number_category<B>::value == number_kind_integer), number<B, et_off> >::type operator % (const V& a, const number<B, et_off>& b) { detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(b); number<B, et_off> result; using default_ops::eval_modulus; eval_modulus(result.backend(), number<B, et_off>::canonical_value(a), b.backend()); return result; }
BOOST_MP_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type operator - (const V& a, const number<B, et_off>& b) { detail::scoped_default_precision<multiprecision::number<B, et_off> > precision_guard(b); number<B, et_off> result; using default_ops::eval_subtract; eval_subtract(result.backend(), number<B, et_off>::canonical_value(a), b.backend()); return result; }
inline number<IntBackend, ET> denominator(const number<rational_adapter<IntBackend>, ET>& val) { return val.backend().data().denominator(); }
inline number<IntBackend, ET> numerator(const number<rational_adaptor<IntBackend>, ET>& val) { return val.backend().data().numerator(); }
BOOST_MP_FORCEINLINE typename enable_if_c<number_category<B>::value == number_kind_integer, number<B, et_off> >::type operator & (const number<B, et_off>& a, number<B, et_off>&& b) { using default_ops::eval_bitwise_and; eval_bitwise_and(b.backend(), a.backend()); return static_cast<number<B, et_off>&&>(b); }
BOOST_MP_FORCEINLINE typename enable_if_c<number_category<B>::value == number_kind_integer, number<B, et_off> >::type operator % (number<B, et_off>&& a, const number<B, et_off>& b) { using default_ops::eval_modulus; eval_modulus(a.backend(), b.backend()); return static_cast<number<B, et_off>&&>(a); }
BOOST_MP_FORCEINLINE number<B, et_off> operator / (number<B, et_off>&& a, const number<B, et_off>& b) { using default_ops::eval_divide; eval_divide(a.backend(), b.backend()); return static_cast<number<B, et_off>&&>(a); }
BOOST_MP_FORCEINLINE number<B, et_off> operator * (const number<B, et_off>& a, number<B, et_off>&& b) { using default_ops::eval_multiply; eval_multiply(b.backend(), a.backend()); return static_cast<number<B, et_off>&&>(b); }
BOOST_MP_FORCEINLINE number<B, et_off> operator & (const number<B, et_off>& a, number<B, et_off>&& b) { using default_ops::eval_bitwise_and; eval_bitwise_and(b.backend(), a.backend()); return static_cast<number<B, et_off>&&>(b); }
BOOST_MP_FORCEINLINE number<B, et_off> operator ~ (const number<B, et_off>& v) { number<B, et_off> result; eval_complement(result.backend(), v.backend()); return BOOST_MP_MOVE(result); }
BOOST_MP_FORCEINLINE number<B, et_off> operator ^ (number<B, et_off>&& a, const number<B, et_off>& b) { using default_ops::eval_bitwise_xor; eval_bitwise_xor(a.backend(), b.backend()); return static_cast<number<B, et_off>&&>(a); }