Add make_rational(FT) and make_rational(pair).

This commit is contained in:
Marc Glisse 2013-02-22 15:47:20 +01:00
parent facc1d0cf5
commit 48388241a0
2 changed files with 19 additions and 0 deletions

View File

@ -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); }

View File

@ -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);