mirror of https://github.com/CGAL/cgal
Replace boost::totally_ordered* with <=> for Gmpq
This commit is contained in:
parent
2167d4ffef
commit
58e3720962
|
|
@ -35,6 +35,10 @@
|
|||
#include <CGAL/Handle_for.h>
|
||||
#include <CGAL/Profile_counter.h>
|
||||
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
# include <compare>
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_MSVC)
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable:4146)
|
||||
|
|
@ -61,8 +65,17 @@ private:
|
|||
|
||||
|
||||
class Gmpq
|
||||
: Handle_for<Gmpq_rep>,
|
||||
boost::totally_ordered1< Gmpq
|
||||
: Handle_for<Gmpq_rep>
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
, boost::field_operators2< Gmpq, int
|
||||
, boost::field_operators2< Gmpq, long
|
||||
, boost::field_operators2< Gmpq, long long
|
||||
, boost::field_operators2< Gmpq, double
|
||||
, boost::field_operators2< Gmpq, Gmpz
|
||||
, boost::field_operators2< Gmpq, Gmpfr
|
||||
> > > > > >
|
||||
#else
|
||||
, boost::totally_ordered1< Gmpq
|
||||
, boost::ordered_field_operators2< Gmpq, int
|
||||
, boost::ordered_field_operators2< Gmpq, long
|
||||
, boost::ordered_field_operators2< Gmpq, long long
|
||||
|
|
@ -70,6 +83,7 @@ class Gmpq
|
|||
, boost::ordered_field_operators2< Gmpq, Gmpz
|
||||
, boost::ordered_field_operators2< Gmpq, Gmpfr
|
||||
> > > > > > >
|
||||
#endif
|
||||
{
|
||||
typedef Handle_for<Gmpq_rep> Base;
|
||||
public:
|
||||
|
|
@ -223,7 +237,11 @@ public:
|
|||
Gmpq& operator/=(const Gmpq &q);
|
||||
|
||||
bool operator==(const Gmpq &q) const noexcept { return mpq_equal(this->mpq(), q.mpq()) != 0;}
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
std::strong_ordering operator<=>(const Gmpq&q) const noexcept { return mpq_cmp(this->mpq(), q.mpq()) <=> 0; }
|
||||
#else
|
||||
bool operator< (const Gmpq &q) const noexcept { return mpq_cmp(this->mpq(), q.mpq()) < 0; }
|
||||
#endif
|
||||
|
||||
double to_double() const noexcept;
|
||||
Sign sign() const noexcept;
|
||||
|
|
@ -245,54 +263,78 @@ public:
|
|||
Gmpq& operator-=(int z){return (*this)-= Gmpq(z);}
|
||||
Gmpq& operator*=(int z){return (*this)*= Gmpq(z);}
|
||||
Gmpq& operator/=(int z){return (*this)/= Gmpq(z);}
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
std::strong_ordering operator<=>(int z) const noexcept { return mpq_cmp_si(mpq(),z,1) <=> 0; }
|
||||
#else
|
||||
bool operator==(int z) const {return mpq_cmp_si(mpq(),z,1)==0;}
|
||||
bool operator< (int z) const {return mpq_cmp_si(mpq(),z,1)<0;}
|
||||
bool operator> (int z) const {return mpq_cmp_si(mpq(),z,1)>0;}
|
||||
#endif
|
||||
|
||||
// Interoperability with long
|
||||
Gmpq& operator+=(long z){return (*this)+= Gmpq(z);}
|
||||
Gmpq& operator-=(long z){return (*this)-= Gmpq(z);}
|
||||
Gmpq& operator*=(long z){return (*this)*= Gmpq(z);}
|
||||
Gmpq& operator/=(long z){return (*this)/= Gmpq(z);}
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
std::strong_ordering operator<=>(long z) const noexcept { return mpq_cmp_si(mpq(),z,1) <=> 0; }
|
||||
#else
|
||||
bool operator==(long z) const {return mpq_cmp_si(mpq(),z,1)==0;}
|
||||
bool operator< (long z) const {return mpq_cmp_si(mpq(),z,1)<0;}
|
||||
bool operator> (long z) const {return mpq_cmp_si(mpq(),z,1)>0;}
|
||||
#endif
|
||||
|
||||
// Interoperability with long long
|
||||
Gmpq& operator+=(long long z){return (*this)+= Gmpq(z);}
|
||||
Gmpq& operator-=(long long z){return (*this)-= Gmpq(z);}
|
||||
Gmpq& operator*=(long long z){return (*this)*= Gmpq(z);}
|
||||
Gmpq& operator/=(long long z){return (*this)/= Gmpq(z);}
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
std::strong_ordering operator<=>(long long z) const noexcept { return *this <=> Gmpq(z); }
|
||||
#else
|
||||
bool operator==(long long z) const {return (*this)== Gmpq(z);}
|
||||
bool operator< (long long z) const {return (*this)< Gmpq(z);}
|
||||
bool operator> (long long z) const {return (*this)> Gmpq(z);}
|
||||
#endif
|
||||
|
||||
// Interoperability with double
|
||||
Gmpq& operator+=(double d){return (*this)+= Gmpq(d);}
|
||||
Gmpq& operator-=(double d){return (*this)-= Gmpq(d);}
|
||||
Gmpq& operator*=(double d){return (*this)*= Gmpq(d);}
|
||||
Gmpq& operator/=(double d){return (*this)/= Gmpq(d);}
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
std::strong_ordering operator<=>(double d) const noexcept { return *this <=> Gmpq(d); }
|
||||
#else
|
||||
bool operator==(double d) const {return (*this)== Gmpq(d);}
|
||||
bool operator< (double d) const {return (*this)< Gmpq(d);}
|
||||
bool operator> (double d) const {return (*this)> Gmpq(d);}
|
||||
#endif
|
||||
|
||||
// Interoperability with Gmpz
|
||||
Gmpq& operator+=(const Gmpz&);
|
||||
Gmpq& operator-=(const Gmpz&);
|
||||
Gmpq& operator*=(const Gmpz&);
|
||||
Gmpq& operator/=(const Gmpz&);
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
std::strong_ordering operator<=>(const Gmpz& z) const noexcept { return *this <=> Gmpq(z); }
|
||||
#else
|
||||
bool operator==(const Gmpz &z) const {return (*this)== Gmpq(z);}
|
||||
bool operator< (const Gmpz &z) const {return (*this)< Gmpq(z);}
|
||||
bool operator> (const Gmpz &z) const {return (*this)> Gmpq(z);}
|
||||
#endif
|
||||
|
||||
// Interoperability with Gmpfr
|
||||
Gmpq& operator+=(const Gmpfr &f){return (*this)+= Gmpq(f);}
|
||||
Gmpq& operator-=(const Gmpfr &f){return (*this)-= Gmpq(f);}
|
||||
Gmpq& operator*=(const Gmpfr &f){return (*this)*= Gmpq(f);}
|
||||
Gmpq& operator/=(const Gmpfr &f){return (*this)/= Gmpq(f);}
|
||||
#if __cpp_impl_three_way_comparison >= 201907L
|
||||
std::strong_ordering operator<=>(const Gmpfr& f) const noexcept { return 0 <=> mpfr_cmp_q(f.fr(),mpq()); }
|
||||
#else
|
||||
bool operator==(const Gmpfr &f) const {return mpfr_cmp_q(f.fr(),mpq())==0;}
|
||||
bool operator< (const Gmpfr &f) const {return mpfr_cmp_q(f.fr(),mpq())>0;}
|
||||
bool operator> (const Gmpfr &f) const {return mpfr_cmp_q(f.fr(),mpq())<0;}
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue