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; }
|
const RT& numerator (const Rational& r) const { return r; }
|
||||||
RT denominator (const Rational&) const { return RT(1); }
|
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
|
Rational make_rational(const RT & n, const RT & d) const
|
||||||
{ return n / d; }
|
{ return n / d; }
|
||||||
};
|
};
|
||||||
|
|
@ -70,6 +78,14 @@ public:
|
||||||
return den;
|
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>
|
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
|
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); }
|
{ return Compose()(n,d); }
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@ void test_rational_traits(){
|
||||||
assert( Rational_traits().denominator(x) == RT(2));
|
assert( Rational_traits().denominator(x) == RT(2));
|
||||||
assert( Rational_traits().make_rational(RT(7),RT(2)) == x);
|
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) == 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
|
// gloabal function to_rational
|
||||||
x = CGAL::to_rational<Rational>(3.5);
|
x = CGAL::to_rational<Rational>(3.5);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue