Fix: add workaround for boost versions >=1.84.0 (#4098)

This commit is contained in:
Archez 2024-05-01 16:41:17 -04:00 committed by GitHub
parent 4a576f45ee
commit fd9cd9c5eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 35 additions and 6 deletions

View File

@ -46,10 +46,18 @@ template<> struct is_char_type<std::byte>: public boost::true_type {};
#endif // #if !BOOST_VERSION_HAS_HASH_RANGE #endif // #if !BOOST_VERSION_HAS_HASH_RANGE
#if BOOST_USE_STD_TYPES
#define BOOST_ENABLE_IF std::enable_if
#define BOOST_IS_SAME std::is_same
#else
#define BOOST_ENABLE_IF boost::enable_if_
#define BOOST_IS_SAME is_same
#endif
template<class It> template<class It>
inline typename boost::enable_if_< inline typename BOOST_ENABLE_IF<
is_char_type<typename std::iterator_traits<It>::value_type>::value && is_char_type<typename std::iterator_traits<It>::value_type>::value &&
is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value, BOOST_IS_SAME<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value,
std::size_t>::type std::size_t>::type
hash_range_32( uint32_t seed, It first, It last ) hash_range_32( uint32_t seed, It first, It last )
{ {
@ -114,4 +122,7 @@ std::size_t>::type
} // namespace hash_detail } // namespace hash_detail
} // namespace boost } // namespace boost
#undef BOOST_ENABLE_IF
#undef BOOST_IS_SAME
#endif // #ifndef BOOST_HASH_DETAIL_HASH_RANGE_32_HPP #endif // #ifndef BOOST_HASH_DETAIL_HASH_RANGE_32_HPP

View File

@ -23,6 +23,18 @@
#endif // #if !BOOST_VERSION_HAS_HASH_RANGE #endif // #if !BOOST_VERSION_HAS_HASH_RANGE
#if BOOST_USE_STD_TYPES
#define BOOST_ENABLE_IF std::enable_if
#define BOOST_IS_INTEGRAL hash_detail::is_integral
#define BOOST_IS_UNSIGNED is_unsigned
#define BOOST_MAKE_UNSIGNED make_unsigned
#else
#define BOOST_ENABLE_IF boost::enable_if_
#define BOOST_IS_INTEGRAL boost::is_integral
#define BOOST_IS_UNSIGNED boost::is_unsigned
#define BOOST_MAKE_UNSIGNED boost::make_unsigned
#endif
namespace boost namespace boost
{ {
@ -36,7 +48,7 @@ namespace boost
{ {
template<class T, template<class T,
bool bigger_than_size_t = (sizeof(T) > sizeof(uint32_t)), bool bigger_than_size_t = (sizeof(T) > sizeof(uint32_t)),
bool is_unsigned = boost::is_unsigned<T>::value, bool is_unsigned = BOOST_IS_UNSIGNED<T>::value,
std::size_t size_t_bits = sizeof(uint32_t) * CHAR_BIT, std::size_t size_t_bits = sizeof(uint32_t) * CHAR_BIT,
std::size_t type_bits = sizeof(T) * CHAR_BIT> std::size_t type_bits = sizeof(T) * CHAR_BIT>
struct hash_integral_impl_32; struct hash_integral_impl_32;
@ -53,7 +65,7 @@ namespace boost
{ {
static uint32_t fn( T v ) static uint32_t fn( T v )
{ {
typedef typename boost::make_unsigned<T>::type U; typedef typename BOOST_MAKE_UNSIGNED<T>::type U;
if( v >= 0 ) if( v >= 0 )
{ {
@ -97,7 +109,7 @@ namespace boost
} // namespace hash_detail } // namespace hash_detail
template <typename T> template <typename T>
typename boost::enable_if_<boost::is_integral<T>::value, uint32_t>::type typename BOOST_ENABLE_IF<BOOST_IS_INTEGRAL<T>::value, uint32_t>::type
hash_value_32( T v ) hash_value_32( T v )
{ {
return hash_detail::hash_integral_impl_32<T>::fn( v ); return hash_detail::hash_integral_impl_32<T>::fn( v );
@ -106,7 +118,7 @@ namespace boost
// contiguous ranges (string, vector, array) // contiguous ranges (string, vector, array)
#if BOOST_VERSION_HAS_HASH_RANGE #if BOOST_VERSION_HAS_HASH_RANGE
template <typename T> template <typename T>
typename boost::enable_if_<container_hash::is_contiguous_range<T>::value, uint32_t>::type typename BOOST_ENABLE_IF<container_hash::is_contiguous_range<T>::value, uint32_t>::type
hash_value_32( T const& v ) hash_value_32( T const& v )
{ {
return boost::hash_range_32( v.data(), v.data() + v.size() ); return boost::hash_range_32( v.data(), v.data() + v.size() );
@ -168,5 +180,9 @@ namespace boost
} // namespace boost } // namespace boost
#undef BOOST_HASH_CHAR_TRAITS #undef BOOST_HASH_CHAR_TRAITS
#undef BOOST_ENABLE_IF
#undef BOOST_IS_INTEGRAL
#undef BOOST_IS_UNSIGNED
#undef BOOST_MAKE_UNSIGNED
#endif // #ifndef BOOST_FUNCTIONAL_HASH_HASH_32_HPP #endif // #ifndef BOOST_FUNCTIONAL_HASH_HASH_32_HPP

View File

@ -6,4 +6,6 @@
#define BOOST_VERSION_HAS_HASH_RANGE ((BOOST_VERSION / 100 % 1000) >= 81) #define BOOST_VERSION_HAS_HASH_RANGE ((BOOST_VERSION / 100 % 1000) >= 81)
#define BOOST_USE_STD_TYPES ((BOOST_VERSION / 100 % 1000) >= 84)
#endif // #ifndef BOOST_CONTAINER_HASH_VERSION_HPP #endif // #ifndef BOOST_CONTAINER_HASH_VERSION_HPP