forked from boostorg/integer
Integrated MSVC fixes from Daryle
[SVN r12012]
This commit is contained in:
committed by
Peter Dimov
parent
f6738d210c
commit
6a8080014a
@ -134,7 +134,8 @@ namespace detail
|
|||||||
struct static_gcd_helper_t
|
struct static_gcd_helper_t
|
||||||
{
|
{
|
||||||
BOOST_STATIC_CONSTANT( unsigned long, value
|
BOOST_STATIC_CONSTANT( unsigned long, value
|
||||||
= static_gcd_helper2_t<Value1>::helper<Value2>::value );
|
= static_gcd_helper2_t<Value1>::BOOST_NESTED_TEMPLATE
|
||||||
|
helper<Value2>::value );
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -192,7 +193,8 @@ namespace detail
|
|||||||
struct static_lcm_helper_t
|
struct static_lcm_helper_t
|
||||||
{
|
{
|
||||||
BOOST_STATIC_CONSTANT( unsigned long, value
|
BOOST_STATIC_CONSTANT( unsigned long, value
|
||||||
= static_lcm_helper2_t<Value1>::helper<Value2>::value );
|
= static_lcm_helper2_t<Value1>::BOOST_NESTED_TEMPLATE
|
||||||
|
helper<Value2>::value );
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -276,8 +278,9 @@ namespace detail
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Function objects to find the best way of computing GCD or LCM
|
// Function objects to find the best way of computing GCD or LCM
|
||||||
|
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
||||||
template < typename T, bool IsSpecialized, bool IsSigned >
|
template < typename T, bool IsSpecialized, bool IsSigned >
|
||||||
struct gcd_optimal_evaluator_helper
|
struct gcd_optimal_evaluator_helper_t
|
||||||
{
|
{
|
||||||
T operator ()( T const &a, T const &b )
|
T operator ()( T const &a, T const &b )
|
||||||
{
|
{
|
||||||
@ -286,13 +289,47 @@ namespace detail
|
|||||||
};
|
};
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
struct gcd_optimal_evaluator_helper< T, true, true >
|
struct gcd_optimal_evaluator_helper_t< T, true, true >
|
||||||
{
|
{
|
||||||
T operator ()( T const &a, T const &b )
|
T operator ()( T const &a, T const &b )
|
||||||
{
|
{
|
||||||
return gcd_integer( a, b );
|
return gcd_integer( a, b );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
template < bool IsSpecialized, bool IsSigned >
|
||||||
|
struct gcd_optimal_evaluator_helper2_t
|
||||||
|
{
|
||||||
|
template < typename T >
|
||||||
|
struct helper
|
||||||
|
{
|
||||||
|
T operator ()( T const &a, T const &b )
|
||||||
|
{
|
||||||
|
return gcd_euclidean( a, b );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
template < >
|
||||||
|
struct gcd_optimal_evaluator_helper2_t< true, true >
|
||||||
|
{
|
||||||
|
template < typename T >
|
||||||
|
struct helper
|
||||||
|
{
|
||||||
|
T operator ()( T const &a, T const &b )
|
||||||
|
{
|
||||||
|
return gcd_integer( a, b );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
template < typename T, bool IsSpecialized, bool IsSigned >
|
||||||
|
struct gcd_optimal_evaluator_helper_t
|
||||||
|
: gcd_optimal_evaluator_helper2_t<IsSpecialized, IsSigned>
|
||||||
|
::BOOST_NESTED_TEMPLATE helper<T>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
struct gcd_optimal_evaluator
|
struct gcd_optimal_evaluator
|
||||||
@ -301,8 +338,8 @@ namespace detail
|
|||||||
{
|
{
|
||||||
typedef ::std::numeric_limits<T> limits_type;
|
typedef ::std::numeric_limits<T> limits_type;
|
||||||
|
|
||||||
typedef gcd_optimal_evaluator_helper<T, limits_type::is_specialized,
|
typedef gcd_optimal_evaluator_helper_t<T,
|
||||||
limits_type::is_signed> helper_type;
|
limits_type::is_specialized, limits_type::is_signed> helper_type;
|
||||||
|
|
||||||
helper_type solver;
|
helper_type solver;
|
||||||
|
|
||||||
@ -310,8 +347,9 @@ namespace detail
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
||||||
template < typename T, bool IsSpecialized, bool IsSigned >
|
template < typename T, bool IsSpecialized, bool IsSigned >
|
||||||
struct lcm_optimal_evaluator_helper
|
struct lcm_optimal_evaluator_helper_t
|
||||||
{
|
{
|
||||||
T operator ()( T const &a, T const &b )
|
T operator ()( T const &a, T const &b )
|
||||||
{
|
{
|
||||||
@ -320,13 +358,47 @@ namespace detail
|
|||||||
};
|
};
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
struct lcm_optimal_evaluator_helper< T, true, true >
|
struct lcm_optimal_evaluator_helper_t< T, true, true >
|
||||||
{
|
{
|
||||||
T operator ()( T const &a, T const &b )
|
T operator ()( T const &a, T const &b )
|
||||||
{
|
{
|
||||||
return lcm_integer( a, b );
|
return lcm_integer( a, b );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
template < bool IsSpecialized, bool IsSigned >
|
||||||
|
struct lcm_optimal_evaluator_helper2_t
|
||||||
|
{
|
||||||
|
template < typename T >
|
||||||
|
struct helper
|
||||||
|
{
|
||||||
|
T operator ()( T const &a, T const &b )
|
||||||
|
{
|
||||||
|
return lcm_euclidean( a, b );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
template < >
|
||||||
|
struct lcm_optimal_evaluator_helper2_t< true, true >
|
||||||
|
{
|
||||||
|
template < typename T >
|
||||||
|
struct helper
|
||||||
|
{
|
||||||
|
T operator ()( T const &a, T const &b )
|
||||||
|
{
|
||||||
|
return lcm_integer( a, b );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
template < typename T, bool IsSpecialized, bool IsSigned >
|
||||||
|
struct lcm_optimal_evaluator_helper_t
|
||||||
|
: lcm_optimal_evaluator_helper2_t<IsSpecialized, IsSigned>
|
||||||
|
::BOOST_NESTED_TEMPLATE helper<T>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
template < typename T >
|
template < typename T >
|
||||||
struct lcm_optimal_evaluator
|
struct lcm_optimal_evaluator
|
||||||
@ -335,8 +407,8 @@ namespace detail
|
|||||||
{
|
{
|
||||||
typedef ::std::numeric_limits<T> limits_type;
|
typedef ::std::numeric_limits<T> limits_type;
|
||||||
|
|
||||||
typedef lcm_optimal_evaluator_helper<T, limits_type::is_specialized,
|
typedef lcm_optimal_evaluator_helper_t<T,
|
||||||
limits_type::is_signed> helper_type;
|
limits_type::is_specialized, limits_type::is_signed> helper_type;
|
||||||
|
|
||||||
helper_type solver;
|
helper_type solver;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user