Index: gcc/libstdc++-v3/include/std/ratio |
diff --git a/gcc/libstdc++-v3/include/std/ratio b/gcc/libstdc++-v3/include/std/ratio |
deleted file mode 100644 |
index f0e8831c5970f1321be29d9da07113b98a462bc4..0000000000000000000000000000000000000000 |
--- a/gcc/libstdc++-v3/include/std/ratio |
+++ /dev/null |
@@ -1,303 +0,0 @@ |
-// ratio -*- C++ -*- |
- |
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc. |
-// |
-// This file is part of the GNU ISO C++ Library. This library is free |
-// software; you can redistribute it and/or modify it under the |
-// terms of the GNU General Public License as published by the |
-// Free Software Foundation; either version 3, or (at your option) |
-// any later version. |
- |
-// This library is distributed in the hope that it will be useful, |
-// but WITHOUT ANY WARRANTY; without even the implied warranty of |
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
-// GNU General Public License for more details. |
- |
-// Under Section 7 of GPL version 3, you are granted additional |
-// permissions described in the GCC Runtime Library Exception, version |
-// 3.1, as published by the Free Software Foundation. |
- |
-// You should have received a copy of the GNU General Public License and |
-// a copy of the GCC Runtime Library Exception along with this program; |
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
-// <http://www.gnu.org/licenses/>. |
- |
-/** @file ratio |
- * This is a Standard C++ Library header. |
- */ |
- |
-#ifndef _GLIBCXX_RATIO |
-#define _GLIBCXX_RATIO 1 |
- |
-#pragma GCC system_header |
- |
-#ifndef __GXX_EXPERIMENTAL_CXX0X__ |
-# include <c++0x_warning.h> |
-#else |
- |
-#include <type_traits> |
-#include <cstdint> |
- |
-#ifdef _GLIBCXX_USE_C99_STDINT_TR1 |
- |
-namespace std |
-{ |
- /** |
- * @defgroup ratio Rational Arithmetic |
- * @ingroup utilities |
- * |
- * Compile time representation of fininte rational numbers. |
- * @{ |
- */ |
- |
- template<intmax_t _Pn> |
- struct __static_sign |
- : integral_constant<intmax_t, (_Pn < 0) ? -1 : 1> |
- { }; |
- |
- template<intmax_t _Pn> |
- struct __static_abs |
- : integral_constant<intmax_t, _Pn * __static_sign<_Pn>::value> |
- { }; |
- |
- template<intmax_t _Pn, intmax_t _Qn> |
- struct __static_gcd; |
- |
- template<intmax_t _Pn, intmax_t _Qn> |
- struct __static_gcd |
- : __static_gcd<_Qn, (_Pn % _Qn)> |
- { }; |
- |
- template<intmax_t _Pn> |
- struct __static_gcd<_Pn, 0> |
- : integral_constant<intmax_t, __static_abs<_Pn>::value> |
- { }; |
- |
- template<intmax_t _Qn> |
- struct __static_gcd<0, _Qn> |
- : integral_constant<intmax_t, __static_abs<_Qn>::value> |
- { }; |
- |
- // Let c = 2^(half # of bits in an intmax_t) |
- // then we find a1, a0, b1, b0 s.t. N = a1*c + a0, M = b1*c + b0 |
- // The multiplication of N and M becomes, |
- // N * M = (a1 * b1)c^2 + (a0 * b1 + b0 * a1)c + a0 * b0 |
- // Multiplication is safe if each term and the sum of the terms |
- // is representable by intmax_t. |
- template<intmax_t _Pn, intmax_t _Qn> |
- struct __safe_multiply |
- { |
- private: |
- static const uintmax_t __c = uintmax_t(1) << (sizeof(intmax_t) * 4); |
- |
- static const uintmax_t __a0 = __static_abs<_Pn>::value % __c; |
- static const uintmax_t __a1 = __static_abs<_Pn>::value / __c; |
- static const uintmax_t __b0 = __static_abs<_Qn>::value % __c; |
- static const uintmax_t __b1 = __static_abs<_Qn>::value / __c; |
- |
- static_assert(__a1 == 0 || __b1 == 0, |
- "overflow in multiplication"); |
- static_assert(__a0 * __b1 + __b0 * __a1 < (__c >> 1), |
- "overflow in multiplication"); |
- static_assert(__b0 * __a0 <= __INTMAX_MAX__, |
- "overflow in multiplication"); |
- static_assert((__a0 * __b1 + __b0 * __a1) * __c <= |
- __INTMAX_MAX__ - __b0 * __a0, "overflow in multiplication"); |
- |
- public: |
- static const intmax_t value = _Pn * _Qn; |
- }; |
- |
- // Helpers for __safe_add |
- template<intmax_t _Pn, intmax_t _Qn, bool> |
- struct __add_overflow_check_impl |
- : integral_constant<bool, (_Pn <= __INTMAX_MAX__ - _Qn)> |
- { }; |
- |
- template<intmax_t _Pn, intmax_t _Qn> |
- struct __add_overflow_check_impl<_Pn, _Qn, false> |
- : integral_constant<bool, (_Pn >= -__INTMAX_MAX__ - _Qn)> |
- { }; |
- |
- template<intmax_t _Pn, intmax_t _Qn> |
- struct __add_overflow_check |
- : __add_overflow_check_impl<_Pn, _Qn, (_Qn >= 0)> |
- { }; |
- |
- template<intmax_t _Pn, intmax_t _Qn> |
- struct __safe_add |
- { |
- static_assert(__add_overflow_check<_Pn, _Qn>::value != 0, |
- "overflow in addition"); |
- |
- static const intmax_t value = _Pn + _Qn; |
- }; |
- |
- /** |
- * @brief Provides compile-time rational arithmetic. |
- * |
- * This class template represents any finite rational number with a |
- * numerator and denominator representable by compile-time constants of |
- * type intmax_t. The ratio is simplified when instantiated. |
- * |
- * For example: |
- * @code |
- * std::ratio<7,-21>::num == -1; |
- * std::ratio<7,-21>::den == 3; |
- * @endcode |
- * |
- */ |
- template<intmax_t _Num, intmax_t _Den = 1> |
- struct ratio |
- { |
- static_assert(_Den != 0, "denominator cannot be zero"); |
- static_assert(_Num >= -__INTMAX_MAX__ && _Den >= -__INTMAX_MAX__, |
- "out of range"); |
- |
- // Note: sign(N) * abs(N) == N |
- static const intmax_t num = |
- _Num * __static_sign<_Den>::value / __static_gcd<_Num, _Den>::value; |
- |
- static const intmax_t den = |
- __static_abs<_Den>::value / __static_gcd<_Num, _Den>::value; |
- }; |
- |
- template<intmax_t _Num, intmax_t _Den> |
- const intmax_t ratio<_Num, _Den>::num; |
- |
- template<intmax_t _Num, intmax_t _Den> |
- const intmax_t ratio<_Num, _Den>::den; |
- |
- /// ratio_add |
- template<typename _R1, typename _R2> |
- struct ratio_add |
- { |
- private: |
- static const intmax_t __gcd = |
- __static_gcd<_R1::den, _R2::den>::value; |
- |
- public: |
- typedef ratio< |
- __safe_add< |
- __safe_multiply<_R1::num, (_R2::den / __gcd)>::value, |
- __safe_multiply<_R2::num, (_R1::den / __gcd)>::value>::value, |
- __safe_multiply<_R1::den, (_R2::den / __gcd)>::value> type; |
- }; |
- |
- /// ratio_subtract |
- template<typename _R1, typename _R2> |
- struct ratio_subtract |
- { |
- typedef typename ratio_add< |
- _R1, |
- ratio<-_R2::num, _R2::den>>::type type; |
- }; |
- |
- /// ratio_multiply |
- template<typename _R1, typename _R2> |
- struct ratio_multiply |
- { |
- private: |
- static const intmax_t __gcd1 = |
- __static_gcd<_R1::num, _R2::den>::value; |
- static const intmax_t __gcd2 = |
- __static_gcd<_R2::num, _R1::den>::value; |
- |
- public: |
- typedef ratio< |
- __safe_multiply<(_R1::num / __gcd1), |
- (_R2::num / __gcd2)>::value, |
- __safe_multiply<(_R1::den / __gcd2), |
- (_R2::den / __gcd1)>::value> type; |
- }; |
- |
- /// ratio_divide |
- template<typename _R1, typename _R2> |
- struct ratio_divide |
- { |
- static_assert(_R2::num != 0, "division by 0"); |
- |
- typedef typename ratio_multiply< |
- _R1, |
- ratio<_R2::den, _R2::num>>::type type; |
- }; |
- |
- /// ratio_equal |
- template<typename _R1, typename _R2> |
- struct ratio_equal |
- : integral_constant<bool, _R1::num == _R2::num && _R1::den == _R2::den> |
- { }; |
- |
- /// ratio_not_equal |
- template<typename _R1, typename _R2> |
- struct ratio_not_equal |
- : integral_constant<bool, !ratio_equal<_R1, _R2>::value> |
- { }; |
- |
- template<typename _R1, typename _R2> |
- struct __ratio_less_simple_impl |
- : integral_constant<bool, |
- (__safe_multiply<_R1::num, _R2::den>::value |
- < __safe_multiply<_R2::num, _R1::den>::value)> |
- { }; |
- |
- // If the denominators are equal or the signs differ, we can just compare |
- // numerators, otherwise fallback to the simple cross-multiply method. |
- template<typename _R1, typename _R2> |
- struct __ratio_less_impl |
- : conditional<(_R1::den == _R2::den |
- || (__static_sign<_R1::num>::value |
- != __static_sign<_R2::num>::value)), |
- integral_constant<bool, (_R1::num < _R2::num)>, |
- __ratio_less_simple_impl<_R1, _R2>>::type |
- { }; |
- |
- /// ratio_less |
- template<typename _R1, typename _R2> |
- struct ratio_less |
- : __ratio_less_impl<_R1, _R2>::type |
- { }; |
- |
- /// ratio_less_equal |
- template<typename _R1, typename _R2> |
- struct ratio_less_equal |
- : integral_constant<bool, !ratio_less<_R2, _R1>::value> |
- { }; |
- |
- /// ratio_greater |
- template<typename _R1, typename _R2> |
- struct ratio_greater |
- : integral_constant<bool, ratio_less<_R2, _R1>::value> |
- { }; |
- |
- /// ratio_greater_equal |
- template<typename _R1, typename _R2> |
- struct ratio_greater_equal |
- : integral_constant<bool, !ratio_less<_R1, _R2>::value> |
- { }; |
- |
- typedef ratio<1, 1000000000000000000> atto; |
- typedef ratio<1, 1000000000000000> femto; |
- typedef ratio<1, 1000000000000> pico; |
- typedef ratio<1, 1000000000> nano; |
- typedef ratio<1, 1000000> micro; |
- typedef ratio<1, 1000> milli; |
- typedef ratio<1, 100> centi; |
- typedef ratio<1, 10> deci; |
- typedef ratio< 10, 1> deca; |
- typedef ratio< 100, 1> hecto; |
- typedef ratio< 1000, 1> kilo; |
- typedef ratio< 1000000, 1> mega; |
- typedef ratio< 1000000000, 1> giga; |
- typedef ratio< 1000000000000, 1> tera; |
- typedef ratio< 1000000000000000, 1> peta; |
- typedef ratio< 1000000000000000000, 1> exa; |
- |
- // @} group ratio |
-} |
- |
-#endif //_GLIBCXX_USE_C99_STDINT_TR1 |
- |
-#endif //__GXX_EXPERIMENTAL_CXX0X__ |
- |
-#endif //_GLIBCXX_RATIO |