// Copyright (c) 2006-2007 Max-Planck-Institute Saarbruecken (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v5.1/Algebraic_foundations/include/CGAL/Rational_traits.h $ // $Id: Rational_traits.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // // Author(s) : Michael Hemmer // // ============================================================================= // This file is for backward compatibility // Rational_traits will be replaced by Fraction_traits #ifndef CGAL_RATIONAL_TRAITS_H #define CGAL_RATIONAL_TRAITS_H #include #include #include #include namespace CGAL { namespace internal{ template struct Rational_traits_base { typedef Rational RT; const RT& numerator (const Rational& r) const { return r; } RT denominator (const Rational&) const { return RT(1); } template Rational make_rational(const T & x) const { return x; } template Rational make_rational(const std::pair & x) const { return make_rational(x.first, x.second); } Rational make_rational(const RT & n, const RT & d) const { return n / d; } }; template struct Rational_traits_base { private: typedef Fraction_traits FT; typedef typename FT::Decompose Decomose; typedef typename FT::Compose Compose; public: typedef typename FT::Numerator_type RT; RT numerator (const Rational& r) const { RT num,den; Decomose()(r,num,den); return num; } RT denominator (const Rational& r) const { RT num,den; Decomose()(r,num,den); return den; } template Rational make_rational(const T & x) const { return x; } template Rational make_rational(const std::pair & x) const { return make_rational(x.first, x.second); } template Rational make_rational(const N& n, const D& d,typename boost::enable_if_c::value&&is_implicit_convertible::value,int>::type=0) const { return Compose()(n,d); } template Rational make_rational(const N& n, const D& d,typename boost::enable_if_c::value||!is_implicit_convertible::value,int>::type=0) const { return n/d; } // Assume that n or d is already a fraction }; }// namespace internal // use Fraction_traits if Is_fraction && Num and Den are the same template class Rational_traits : public internal::Rational_traits_base::Is_fraction,Tag_true>::value && ::boost::is_same< typename Fraction_traits::Numerator_type, typename Fraction_traits::Denominator_type >::value > {}; } //namespace CGAL #endif // CGAL_RATIONAL_TRAITS_H // EOF