summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/ratio/ratio.hpp')
-rw-r--r--3rdParty/Boost/src/boost/ratio/ratio.hpp66
1 files changed, 63 insertions, 3 deletions
diff --git a/3rdParty/Boost/src/boost/ratio/ratio.hpp b/3rdParty/Boost/src/boost/ratio/ratio.hpp
index 546e8f0..824cbf0 100644
--- a/3rdParty/Boost/src/boost/ratio/ratio.hpp
+++ b/3rdParty/Boost/src/boost/ratio/ratio.hpp
@@ -36,19 +36,19 @@ time2_demo contained this comment:
#include <boost/ratio/detail/mpl/abs.hpp>
#include <boost/ratio/detail/mpl/sign.hpp>
#include <boost/ratio/detail/mpl/gcd.hpp>
#include <boost/ratio/detail/mpl/lcm.hpp>
#include <cstdlib>
#include <climits>
#include <limits>
#include <boost/cstdint.hpp>
#include <boost/type_traits/integral_constant.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <boost/core/enable_if.hpp>
#include <boost/integer_traits.hpp>
#include <boost/ratio/ratio_fwd.hpp>
#include <boost/ratio/detail/overflow_helpers.hpp>
#ifdef BOOST_RATIO_EXTENSIONS
#include <boost/rational.hpp>
#include <boost/ratio/mpl/rational_c_tag.hpp>
#endif
//
@@ -122,19 +122,19 @@ public:
#if defined(BOOST_NO_CXX11_CONSTEXPR)
template <boost::intmax_t N, boost::intmax_t D>
const boost::intmax_t ratio<N, D>::num;
template <boost::intmax_t N, boost::intmax_t D>
const boost::intmax_t ratio<N, D>::den;
#endif
//----------------------------------------------------------------------------//
// //
-// 20.6.2 Arithmetic on ratio types [ratio.arithmetic] //
+// 20.6.2 Arithmetic on ratio types [ratio.arithmetic] //
// //
//----------------------------------------------------------------------------//
template <class R1, class R2>
struct ratio_add
: boost::ratio_detail::ratio_add<R1, R2>::type
{
};
@@ -152,19 +152,19 @@ struct ratio_multiply
template <class R1, class R2>
struct ratio_divide
: boost::ratio_detail::ratio_divide<R1, R2>::type
{
};
//----------------------------------------------------------------------------//
// //
-// 20.6.3 Comparasion of ratio types [ratio.comparison] //
+// 20.6.3 Comparision of ratio types [ratio.comparison] //
// //
//----------------------------------------------------------------------------//
// ratio_equal
template <class R1, class R2>
struct ratio_equal
: public boost::integral_constant<bool,
(R1::num == R2::num && R1::den == R2::den)>
@@ -198,36 +198,96 @@ struct ratio_greater_equal
{};
template <class R1, class R2>
struct ratio_gcd :
ratio<mpl::gcd_c<boost::intmax_t, R1::num, R2::num>::value,
mpl::lcm_c<boost::intmax_t, R1::den, R2::den>::value>::type
{
};
+ //----------------------------------------------------------------------------//
+ // //
+ // More arithmetic on ratio types [ratio.arithmetic] //
+ // //
+ //----------------------------------------------------------------------------//
+
#ifdef BOOST_RATIO_EXTENSIONS
template <class R>
struct ratio_negate
: ratio<-R::num, R::den>::type
{
};
template <class R>
struct ratio_abs
: ratio<mpl::abs_c<boost::intmax_t, R::num>::value, R::den>::type
{
};
template <class R>
struct ratio_sign
: mpl::sign_c<boost::intmax_t, R::num>
{
};
+
+template <class R>
+struct ratio_inverse
+ : ratio<R::den, R::num>::type
+{
+};
+
+
template <class R1, class R2>
struct ratio_lcm :
ratio<mpl::lcm_c<boost::intmax_t, R1::num, R2::num>::value,
mpl::gcd_c<boost::intmax_t, R1::den, R2::den>::value>::type
{
};
+
+template <class R1, class R2>
+struct ratio_modulo :
+ ratio<(R1::num * R2::den) % (R2::num * R1::den), R1::den * R2::den>::type
+{
+};
+
+namespace detail {
+ template <class R1, class R2, bool r1ltr2>
+ struct ratio_min : R1 {};
+ template <class R1, class R2>
+ struct ratio_min<R1,R2,false> : R2 {};
+
+ template <class R1, class R2, bool r1ltr2>
+ struct ratio_max : R2 {};
+ template <class R1, class R2>
+ struct ratio_max<R1,R2,false> : R1 {};
+}
+
+template <class R1, class R2>
+struct ratio_min : detail::ratio_min<R1, R2, ratio_less<R1,R2>::value>::type
+{
+};
+
+template <class R1, class R2>
+struct ratio_max : detail::ratio_max<R1, R2, ratio_less<R1,R2>::value>::type
+{
+};
+
+template<typename R, int p>
+struct ratio_power :
+ ratio_multiply<
+ typename ratio_power<R, p%2>::type,
+ typename ratio_power<typename ratio_multiply<R, R>::type, p/2>::type
+ >::type
+{};
+
+template<typename R>
+struct ratio_power<R, 0> : ratio<1>::type {};
+
+template<typename R>
+struct ratio_power<R, 1> : R {};
+
+template<typename R>
+struct ratio_power<R, -1> : ratio_divide<ratio<1>, R>::type {};
+
#endif
} // namespace boost
#endif // BOOST_RATIO_RATIO_HPP