BVB Source Codes

mars Show common_factor_ct.hpp Source code

Return Download mars: download common_factor_ct.hpp Source code - Download mars Source code - Type:.hpp
  1. //  Boost common_factor_ct.hpp header file  ----------------------------------//
  2.  
  3. //  (C) Copyright Daryle Walker and Stephen Cleary 2001-2002.
  4. //  Distributed under the Boost Software License, Version 1.0. (See
  5. //  accompanying file LICENSE_1_0.txt or copy at
  6. //  http://www.boost.org/LICENSE_1_0.txt)
  7.  
  8. //  See http://www.boost.org for updates, documentation, and revision history.
  9.  
  10. #ifndef BOOST_INTEGER_COMMON_FACTOR_CT_HPP
  11. #define BOOST_INTEGER_COMMON_FACTOR_CT_HPP
  12.  
  13. #include <boost/integer_fwd.hpp>  // self include
  14. #include <boost/config.hpp>  // for BOOST_STATIC_CONSTANT, etc.
  15.  
  16. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost
  17. {
  18. namespace integer
  19. {
  20.  
  21. //  Implementation details  --------------------------------------------------//
  22.  
  23. namespace detail
  24. {
  25.     // Build GCD with Euclid's recursive algorithm
  26.     template < static_gcd_type Value1, static_gcd_type Value2 >
  27.     struct static_gcd_helper_t
  28.     {
  29.     private:
  30.         BOOST_STATIC_CONSTANT( static_gcd_type, new_value1 = Value2 );
  31.         BOOST_STATIC_CONSTANT( static_gcd_type, new_value2 = Value1 % Value2 );
  32.  
  33.         #ifndef __BORLANDC__
  34.         #define BOOST_DETAIL_GCD_HELPER_VAL(Value) static_cast<static_gcd_type>(Value)
  35.         #else
  36.         typedef static_gcd_helper_t  self_type;
  37.         #define BOOST_DETAIL_GCD_HELPER_VAL(Value)  (self_type:: Value )
  38.         #endif
  39.  
  40.         typedef static_gcd_helper_t< BOOST_DETAIL_GCD_HELPER_VAL(new_value1),
  41.          BOOST_DETAIL_GCD_HELPER_VAL(new_value2) >  next_step_type;
  42.  
  43.         #undef BOOST_DETAIL_GCD_HELPER_VAL
  44.  
  45.     public:
  46.         BOOST_STATIC_CONSTANT( static_gcd_type, value = next_step_type::value );
  47.     };
  48.  
  49.     // Non-recursive case
  50.     template < static_gcd_type Value1 >
  51.     struct static_gcd_helper_t< Value1, 0UL >
  52.     {
  53.         BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1 );
  54.     };
  55.  
  56.     // Build the LCM from the GCD
  57.     template < static_gcd_type Value1, static_gcd_type Value2 >
  58.     struct static_lcm_helper_t
  59.     {
  60.         typedef static_gcd_helper_t<Value1, Value2>  gcd_type;
  61.  
  62.         BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1 / gcd_type::value
  63.          * Value2 );
  64.     };
  65.  
  66.     // Special case for zero-GCD values
  67.     template < >
  68.     struct static_lcm_helper_t< 0UL, 0UL >
  69.     {
  70.         BOOST_STATIC_CONSTANT( static_gcd_type, value = 0UL );
  71.     };
  72.  
  73. }  // namespace detail
  74.  
  75.  
  76. //  Compile-time greatest common divisor evaluator class declaration  --------//
  77.  
  78. template < static_gcd_type Value1, static_gcd_type Value2 > struct static_gcd
  79. {
  80.     BOOST_STATIC_CONSTANT( static_gcd_type, value = (detail::static_gcd_helper_t<Value1, Value2>::value) );
  81. };  // mars_boost::integer::static_gcd
  82.  
  83. #if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
  84. template< static_gcd_type Value1, static_gcd_type Value2 > static_gcd_type const static_gcd< Value1, Value2 >::value;
  85. #endif
  86.  
  87. //  Compile-time least common multiple evaluator class declaration  ----------//
  88.  
  89. template < static_gcd_type Value1, static_gcd_type Value2 > struct static_lcm
  90. {
  91.     BOOST_STATIC_CONSTANT( static_gcd_type, value = (detail::static_lcm_helper_t<Value1, Value2>::value) );
  92. };  // mars_boost::integer::static_lcm
  93.  
  94. #if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
  95. template< static_gcd_type Value1, static_gcd_type Value2 > static_gcd_type const static_lcm< Value1, Value2 >::value;
  96. #endif
  97.  
  98. }  // namespace integer
  99. }  // namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost
  100.  
  101.  
  102. #endif  // BOOST_INTEGER_COMMON_FACTOR_CT_HPP
  103.  
downloadcommon_factor_ct.hpp Source code - Download mars Source code
Related Source Codes/Software:
Hero - Elegant transition library for iOS & tvOS 2017-06-09
deep-photo-styletransfer - Code and data for paper "Deep Photo Style Transfer... 2017-06-09
mastodon - A GNU Social-compatible microblogging server ... 2017-06-09
plyr - A simple HTML5, YouTube and Vimeo player ... 2017-06-08
prepack - Prepack is a partial evaluator for JavaScript. Pre... 2017-06-08
Public-APIs - 2017-06-09
lottie-ios - An iOS library to natively render After Effects ve... 2017-06-09
Awesome-Hacking - A collection of various awesome lists for hackers,... 2017-06-09
algorithms - Minimal examples of data structures and algorithms... 2017-06-10
lectures - Oxford Deep NLP 2017 course 2017-06-10
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top