mirror of https://github.com/CGAL/cgal
Add make_rational(FT) and make_rational(pair).
This commit is contained in:
parent
facc1d0cf5
commit
48388241a0
|
|
@ -43,6 +43,14 @@ struct Rational_traits_base
|
|||
const RT& numerator (const Rational& r) const { return r; }
|
||||
RT denominator (const Rational&) const { return RT(1); }
|
||||
|
||||
template<class T>
|
||||
Rational make_rational(const T & x) const
|
||||
{ return x; }
|
||||
|
||||
template<class T, class U>
|
||||
Rational make_rational(const std::pair<T, U> & x) const
|
||||
{ return make_rational(x.first, x.second); }
|
||||
|
||||
Rational make_rational(const RT & n, const RT & d) const
|
||||
{ return n / d; }
|
||||
};
|
||||
|
|
@ -70,6 +78,14 @@ public:
|
|||
return den;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
Rational make_rational(const T & x) const
|
||||
{ return x; }
|
||||
|
||||
template<class T, class U>
|
||||
Rational make_rational(const std::pair<T, U> & x) const
|
||||
{ return make_rational(x.first, x.second); }
|
||||
|
||||
template<class N,class D>
|
||||
Rational make_rational(const N& n, const D& d,typename boost::enable_if_c<is_implicit_convertible<N,RT>::value&&is_implicit_convertible<D,RT>::value,int>::type=0) const
|
||||
{ return Compose()(n,d); }
|
||||
|
|
|
|||
|
|
@ -44,6 +44,9 @@ void test_rational_traits(){
|
|||
assert( Rational_traits().denominator(x) == RT(2));
|
||||
assert( Rational_traits().make_rational(RT(7),RT(2)) == x);
|
||||
assert( Rational_traits().make_rational(x,x) == Rational(1));
|
||||
assert( Rational_traits().make_rational(x) == x);
|
||||
assert( Rational_traits().make_rational(std::make_pair(x,x)) == Rational(1));
|
||||
assert( Rational_traits().make_rational(std::make_pair(7,RT(2))) == x);
|
||||
|
||||
// gloabal function to_rational
|
||||
x = CGAL::to_rational<Rational>(3.5);
|
||||
|
|
|
|||
Loading…
Reference in New Issue