110 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | //  ratio_fwd.hpp  ---------------------------------------------------------------// | ||
|  | 
 | ||
|  | //  Copyright 2008 Howard Hinnant | ||
|  | //  Copyright 2008 Beman Dawes | ||
|  | //  Copyright 2009 Vicente J. Botet Escriba | ||
|  | 
 | ||
|  | //  Distributed under the Boost Software License, Version 1.0. | ||
|  | //  See http://www.boost.org/LICENSE_1_0.txt | ||
|  | 
 | ||
|  | /* | ||
|  | 
 | ||
|  | This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype. | ||
|  | Many thanks to Howard for making his code available under the Boost license. | ||
|  | The original code was modified to conform to Boost conventions and to section | ||
|  | 20.4 Compile-time rational arithmetic [ratio], of the C++ committee working | ||
|  | paper N2798. | ||
|  | See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf. | ||
|  | 
 | ||
|  | time2_demo contained this comment: | ||
|  | 
 | ||
|  |     Much thanks to Andrei Alexandrescu, | ||
|  |                    Walter Brown, | ||
|  |                    Peter Dimov, | ||
|  |                    Jeff Garland, | ||
|  |                    Terry Golubiewski, | ||
|  |                    Daniel Krugler, | ||
|  |                    Anthony Williams. | ||
|  | */ | ||
|  | 
 | ||
|  | // The way overflow is managed for ratio_less is taken from llvm/libcxx/include/ratio | ||
|  | 
 | ||
|  | #ifndef BOOST_RATIO_RATIO_FWD_HPP | ||
|  | #define BOOST_RATIO_RATIO_FWD_HPP | ||
|  | 
 | ||
|  | #include <boost/ratio/config.hpp> | ||
|  | 
 | ||
|  | #if defined(__GNUC__) && (__GNUC__ >= 4) | ||
|  | #pragma GCC system_header | ||
|  | #endif | ||
|  | 
 | ||
|  | namespace boost | ||
|  | { | ||
|  | 
 | ||
|  | //----------------------------------------------------------------------------// | ||
|  | //                                                                            // | ||
|  | //              20.6 Compile-time rational arithmetic [ratio]                 // | ||
|  | //                                                                            // | ||
|  | //----------------------------------------------------------------------------// | ||
|  | 
 | ||
|  | // ratio | ||
|  | template <boost::intmax_t N, boost::intmax_t D = 1> class ratio; | ||
|  | 
 | ||
|  | // ratio arithmetic | ||
|  | template <class R1, class R2> struct ratio_add; | ||
|  | template <class R1, class R2> struct ratio_subtract; | ||
|  | template <class R1, class R2> struct ratio_multiply; | ||
|  | template <class R1, class R2> struct ratio_divide; | ||
|  | #ifdef BOOST_RATIO_EXTENSIONS | ||
|  | template <class R1, class R2> struct ratio_gcd; | ||
|  | template <class R1, class R2> struct ratio_lcm; | ||
|  | template <class R> struct ratio_negate; | ||
|  | template <class R> struct ratio_abs; | ||
|  | template <class R> struct ratio_sign; | ||
|  | template <class R, int P> struct ratio_power; | ||
|  | #endif | ||
|  | 
 | ||
|  | // ratio comparison | ||
|  | template <class R1, class R2> struct ratio_equal; | ||
|  | template <class R1, class R2> struct ratio_not_equal; | ||
|  | template <class R1, class R2> struct ratio_less; | ||
|  | template <class R1, class R2> struct ratio_less_equal; | ||
|  | template <class R1, class R2> struct ratio_greater; | ||
|  | template <class R1, class R2> struct ratio_greater_equal; | ||
|  | 
 | ||
|  | // convenience SI typedefs | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1), BOOST_RATIO_INTMAX_C(1000000000000000000)> atto; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1),    BOOST_RATIO_INTMAX_C(1000000000000000)> femto; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1),       BOOST_RATIO_INTMAX_C(1000000000000)> pico; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1),          BOOST_RATIO_INTMAX_C(1000000000)> nano; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1),             BOOST_RATIO_INTMAX_C(1000000)> micro; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1),                BOOST_RATIO_INTMAX_C(1000)> milli; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1),                 BOOST_RATIO_INTMAX_C(100)> centi; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1),                  BOOST_RATIO_INTMAX_C(10)> deci; | ||
|  | typedef ratio<                 BOOST_RATIO_INTMAX_C(10), BOOST_RATIO_INTMAX_C(1)> deca; | ||
|  | typedef ratio<                BOOST_RATIO_INTMAX_C(100), BOOST_RATIO_INTMAX_C(1)> hecto; | ||
|  | typedef ratio<               BOOST_RATIO_INTMAX_C(1000), BOOST_RATIO_INTMAX_C(1)> kilo; | ||
|  | typedef ratio<            BOOST_RATIO_INTMAX_C(1000000), BOOST_RATIO_INTMAX_C(1)> mega; | ||
|  | typedef ratio<         BOOST_RATIO_INTMAX_C(1000000000), BOOST_RATIO_INTMAX_C(1)> giga; | ||
|  | typedef ratio<      BOOST_RATIO_INTMAX_C(1000000000000), BOOST_RATIO_INTMAX_C(1)> tera; | ||
|  | typedef ratio<   BOOST_RATIO_INTMAX_C(1000000000000000), BOOST_RATIO_INTMAX_C(1)> peta; | ||
|  | typedef ratio<BOOST_RATIO_INTMAX_C(1000000000000000000), BOOST_RATIO_INTMAX_C(1)> exa; | ||
|  | 
 | ||
|  | #ifdef BOOST_RATIO_EXTENSIONS | ||
|  | 
 | ||
|  | #define BOOST_RATIO_1024 BOOST_RATIO_INTMAX_C(1024) | ||
|  | 
 | ||
|  | // convenience IEC typedefs | ||
|  | typedef ratio<                                                                                     BOOST_RATIO_1024> kibi; | ||
|  | typedef ratio<                                                                    BOOST_RATIO_1024*BOOST_RATIO_1024> mebi; | ||
|  | typedef ratio<                                                   BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> gibi; | ||
|  | typedef ratio<                                  BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> tebi; | ||
|  | typedef ratio<                 BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> pebi; | ||
|  | typedef ratio<BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> exbi; | ||
|  | 
 | ||
|  | #endif | ||
|  | }  // namespace boost | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif  // BOOST_RATIO_HPP |