aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted/boost/core
diff options
context:
space:
mode:
authorrobot-contrib <robot-contrib@yandex-team.com>2023-08-14 21:00:54 +0300
committerrobot-contrib <robot-contrib@yandex-team.com>2023-08-15 02:08:12 +0300
commite42aaca2003e4874e8ce78872ef177429d376e39 (patch)
treef0dc1b8bdfc3a72cf4d9836309083015aa1d07d8 /contrib/restricted/boost/core
parenta0614d177962b2b05fb7f8e4e051ed65bb9ce83a (diff)
downloadydb-e42aaca2003e4874e8ce78872ef177429d376e39.tar.gz
Update contrib/restricted/boost/core to 1.83.0
Diffstat (limited to 'contrib/restricted/boost/core')
-rw-r--r--contrib/restricted/boost/core/include/boost/core/bit.hpp375
-rw-r--r--contrib/restricted/boost/core/include/boost/core/checked_delete.hpp23
-rw-r--r--contrib/restricted/boost/core/ya.make4
3 files changed, 366 insertions, 36 deletions
diff --git a/contrib/restricted/boost/core/include/boost/core/bit.hpp b/contrib/restricted/boost/core/include/boost/core/bit.hpp
index 5d14685934..a6147e4d44 100644
--- a/contrib/restricted/boost/core/include/boost/core/bit.hpp
+++ b/contrib/restricted/boost/core/include/boost/core/bit.hpp
@@ -20,6 +20,7 @@
#include <boost/cstdint.hpp>
#include <limits>
#include <cstring>
+#include <cstdlib>
#if defined(_MSC_VER)
@@ -38,6 +39,20 @@
#endif // defined(_MSC_VER)
+#if defined(BOOST_MSVC) && BOOST_MSVC >= 1925
+# define BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL
+#endif
+
+#if defined(__has_builtin)
+# if __has_builtin(__builtin_bit_cast)
+# define BOOST_CORE_HAS_BUILTIN_BIT_CAST
+# endif
+#endif
+
+#if defined(BOOST_MSVC) && BOOST_MSVC >= 1926
+# define BOOST_CORE_HAS_BUILTIN_BIT_CAST
+#endif
+
namespace boost
{
namespace core
@@ -45,6 +60,16 @@ namespace core
// bit_cast
+#if defined(BOOST_CORE_HAS_BUILTIN_BIT_CAST)
+
+template<class To, class From>
+BOOST_CONSTEXPR To bit_cast( From const & from ) BOOST_NOEXCEPT
+{
+ return __builtin_bit_cast( To, from );
+}
+
+#else
+
template<class To, class From>
To bit_cast( From const & from ) BOOST_NOEXCEPT
{
@@ -55,6 +80,8 @@ To bit_cast( From const & from ) BOOST_NOEXCEPT
return to;
}
+#endif
+
// countl
#if defined(__GNUC__) || defined(__clang__)
@@ -102,10 +129,51 @@ BOOST_CONSTEXPR int countl_zero( T x ) BOOST_NOEXCEPT
namespace detail
{
-inline int countl_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+#if defined(_MSC_VER) && defined(BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL)
+
+BOOST_CXX14_CONSTEXPR inline int countl_impl( boost::uint32_t x ) BOOST_NOEXCEPT
{
-#if defined(_MSC_VER)
+ if( __builtin_is_constant_evaluated() )
+ {
+ constexpr unsigned char mod37[ 37 ] = { 32, 31, 6, 30, 9, 5, 0, 29, 16, 8, 2, 4, 21, 0, 19, 28, 25, 15, 0, 7, 10, 1, 17, 3, 22, 20, 26, 0, 11, 18, 23, 27, 12, 24, 13, 14, 0 };
+
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+ return mod37[ x % 37 ];
+ }
+ else
+ {
+ unsigned long r;
+
+ if( _BitScanReverse( &r, x ) )
+ {
+ return 31 - static_cast<int>( r );
+ }
+ else
+ {
+ return 32;
+ }
+ }
+}
+
+BOOST_CXX14_CONSTEXPR inline int countl_impl( boost::uint8_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 24;
+}
+
+BOOST_CXX14_CONSTEXPR inline int countl_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 16;
+}
+
+#elif defined(_MSC_VER)
+
+inline int countl_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
unsigned long r;
if( _BitScanReverse( &r, x ) )
@@ -116,9 +184,22 @@ inline int countl_impl( boost::uint32_t x ) BOOST_NOEXCEPT
{
return 32;
}
+}
+
+inline int countl_impl( boost::uint8_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 24;
+}
+
+inline int countl_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 16;
+}
#else
+inline int countl_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
static unsigned char const mod37[ 37 ] = { 32, 31, 6, 30, 9, 5, 0, 29, 16, 8, 2, 4, 21, 0, 19, 28, 25, 15, 0, 7, 10, 1, 17, 3, 22, 20, 26, 0, 11, 18, 23, 27, 12, 24, 13, 14, 0 };
x |= x >> 1;
@@ -128,14 +209,49 @@ inline int countl_impl( boost::uint32_t x ) BOOST_NOEXCEPT
x |= x >> 16;
return mod37[ x % 37 ];
+}
+
+inline int countl_impl( boost::uint8_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 24;
+}
+
+inline int countl_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 16;
+}
#endif
+
+#if defined(_MSC_VER) && defined(_M_X64) && defined(BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL)
+
+BOOST_CXX14_CONSTEXPR inline int countl_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
+ if( __builtin_is_constant_evaluated() )
+ {
+ return static_cast<boost::uint32_t>( x >> 32 ) != 0?
+ boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x >> 32 ) ):
+ boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) + 32;
+ }
+ else
+ {
+ unsigned long r;
+
+ if( _BitScanReverse64( &r, x ) )
+ {
+ return 63 - static_cast<int>( r );
+ }
+ else
+ {
+ return 64;
+ }
+ }
}
+#elif defined(_MSC_VER) && defined(_M_X64)
+
inline int countl_impl( boost::uint64_t x ) BOOST_NOEXCEPT
{
-#if defined(_MSC_VER) && defined(_M_X64)
-
unsigned long r;
if( _BitScanReverse64( &r, x ) )
@@ -146,30 +262,32 @@ inline int countl_impl( boost::uint64_t x ) BOOST_NOEXCEPT
{
return 64;
}
+}
-#else
+#elif defined(_MSC_VER) && defined(BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL)
+BOOST_CXX14_CONSTEXPR inline int countl_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
return static_cast<boost::uint32_t>( x >> 32 ) != 0?
boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x >> 32 ) ):
boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) + 32;
-
-#endif
}
-inline int countl_impl( boost::uint8_t x ) BOOST_NOEXCEPT
-{
- return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 24;
-}
+#else
-inline int countl_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+inline int countl_impl( boost::uint64_t x ) BOOST_NOEXCEPT
{
- return boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) - 16;
+ return static_cast<boost::uint32_t>( x >> 32 ) != 0?
+ boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x >> 32 ) ):
+ boost::core::detail::countl_impl( static_cast<boost::uint32_t>( x ) ) + 32;
}
+#endif
+
} // namespace detail
template<class T>
-int countl_zero( T x ) BOOST_NOEXCEPT
+BOOST_CXX14_CONSTEXPR int countl_zero( T x ) BOOST_NOEXCEPT
{
BOOST_STATIC_ASSERT( std::numeric_limits<T>::is_integer && !std::numeric_limits<T>::is_signed );
@@ -250,10 +368,44 @@ BOOST_CONSTEXPR int countr_zero( T x ) BOOST_NOEXCEPT
namespace detail
{
-inline int countr_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+#if defined(_MSC_VER) && defined(BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL)
+
+BOOST_CXX14_CONSTEXPR inline int countr_impl( boost::uint32_t x ) BOOST_NOEXCEPT
{
-#if defined(_MSC_VER)
+ if( __builtin_is_constant_evaluated() )
+ {
+ constexpr unsigned char mod37[ 37 ] = { 32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13, 4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9, 5, 20, 8, 19, 18 };
+ return mod37[ ( -(boost::int32_t)x & x ) % 37 ];
+ }
+ else
+ {
+ unsigned long r;
+
+ if( _BitScanForward( &r, x ) )
+ {
+ return static_cast<int>( r );
+ }
+ else
+ {
+ return 32;
+ }
+ }
+}
+BOOST_CXX14_CONSTEXPR inline int countr_impl( boost::uint8_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x100 );
+}
+
+BOOST_CXX14_CONSTEXPR inline int countr_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x10000 );
+}
+
+#elif defined(_MSC_VER)
+
+inline int countr_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
unsigned long r;
if( _BitScanForward( &r, x ) )
@@ -264,19 +416,67 @@ inline int countr_impl( boost::uint32_t x ) BOOST_NOEXCEPT
{
return 32;
}
+}
+
+inline int countr_impl( boost::uint8_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x100 );
+}
+
+inline int countr_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x10000 );
+}
#else
+inline int countr_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
static unsigned char const mod37[ 37 ] = { 32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13, 4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9, 5, 20, 8, 19, 18 };
return mod37[ ( -(boost::int32_t)x & x ) % 37 ];
+}
+
+inline int countr_impl( boost::uint8_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x100 );
+}
+
+inline int countr_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+{
+ return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x10000 );
+}
#endif
+
+#if defined(_MSC_VER) && defined(_M_X64) && defined(BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL)
+
+BOOST_CXX14_CONSTEXPR inline int countr_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
+ if( __builtin_is_constant_evaluated() )
+ {
+ return static_cast<boost::uint32_t>( x ) != 0?
+ boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) ):
+ boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x >> 32 ) ) + 32;
+ }
+ else
+ {
+ unsigned long r;
+
+ if( _BitScanForward64( &r, x ) )
+ {
+ return static_cast<int>( r );
+ }
+ else
+ {
+ return 64;
+ }
+ }
}
+#elif defined(_MSC_VER) && defined(_M_X64)
+
inline int countr_impl( boost::uint64_t x ) BOOST_NOEXCEPT
{
-#if defined(_MSC_VER) && defined(_M_X64)
-
unsigned long r;
if( _BitScanForward64( &r, x ) )
@@ -287,30 +487,32 @@ inline int countr_impl( boost::uint64_t x ) BOOST_NOEXCEPT
{
return 64;
}
+}
-#else
+#elif defined(_MSC_VER) && defined(BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL)
+BOOST_CXX14_CONSTEXPR inline int countr_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
return static_cast<boost::uint32_t>( x ) != 0?
boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) ):
boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x >> 32 ) ) + 32;
-
-#endif
}
-inline int countr_impl( boost::uint8_t x ) BOOST_NOEXCEPT
-{
- return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x100 );
-}
+#else
-inline int countr_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+inline int countr_impl( boost::uint64_t x ) BOOST_NOEXCEPT
{
- return boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) | 0x10000 );
+ return static_cast<boost::uint32_t>( x ) != 0?
+ boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x ) ):
+ boost::core::detail::countr_impl( static_cast<boost::uint32_t>( x >> 32 ) ) + 32;
}
+#endif
+
} // namespace detail
template<class T>
-int countr_zero( T x ) BOOST_NOEXCEPT
+BOOST_CXX14_CONSTEXPR int countr_zero( T x ) BOOST_NOEXCEPT
{
BOOST_STATIC_ASSERT( std::numeric_limits<T>::is_integer && !std::numeric_limits<T>::is_signed );
@@ -446,7 +648,7 @@ BOOST_CXX14_CONSTEXPR T rotl( T x, int s ) BOOST_NOEXCEPT
BOOST_STATIC_ASSERT( std::numeric_limits<T>::is_integer && !std::numeric_limits<T>::is_signed );
unsigned const mask = std::numeric_limits<T>::digits - 1;
- return x << (s & mask) | x >> ((-s) & mask);
+ return static_cast<T>( x << (static_cast<unsigned>( s ) & mask) | x >> (static_cast<unsigned>( -s ) & mask) );
}
template<class T>
@@ -455,7 +657,7 @@ BOOST_CXX14_CONSTEXPR T rotr( T x, int s ) BOOST_NOEXCEPT
BOOST_STATIC_ASSERT( std::numeric_limits<T>::is_integer && !std::numeric_limits<T>::is_signed );
unsigned const mask = std::numeric_limits<T>::digits - 1;
- return x >> (s & mask) | x << ((-s) & mask);
+ return static_cast<T>( x >> (static_cast<unsigned>( s ) & mask) | x << (static_cast<unsigned>( -s ) & mask) );
}
// integral powers of 2
@@ -484,7 +686,7 @@ BOOST_CONSTEXPR T bit_floor( T x ) BOOST_NOEXCEPT
{
BOOST_STATIC_ASSERT( std::numeric_limits<T>::is_integer && !std::numeric_limits<T>::is_signed );
- return x == 0? 0: T(1) << ( boost::core::bit_width( x ) - 1 );
+ return x == 0? T(0): static_cast<T>( T(1) << ( boost::core::bit_width( x ) - 1 ) );
}
namespace detail
@@ -613,6 +815,117 @@ typedef endian::type endian_type;
#undef BOOST_CORE_BIT_NATIVE_INITIALIZER
+// byteswap
+
+namespace detail
+{
+
+BOOST_CONSTEXPR inline boost::uint8_t byteswap_impl( boost::uint8_t x ) BOOST_NOEXCEPT
+{
+ return x;
+}
+
+BOOST_CONSTEXPR inline boost::uint16_t byteswap_impl( boost::uint16_t x ) BOOST_NOEXCEPT
+{
+ return static_cast<boost::uint16_t>( x << 8 | x >> 8 );
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+
+BOOST_CXX14_CONSTEXPR inline boost::uint32_t byteswap_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
+ return __builtin_bswap32( x );
+}
+
+BOOST_CXX14_CONSTEXPR inline boost::uint64_t byteswap_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
+ return __builtin_bswap64( x );
+}
+
+#elif defined(_MSC_VER) && defined(BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL)
+
+BOOST_CXX14_CONSTEXPR inline boost::uint32_t byteswap_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
+ if( __builtin_is_constant_evaluated() )
+ {
+ boost::uint32_t step16 = x << 16 | x >> 16;
+ return ((step16 << 8) & 0xff00ff00) | ((step16 >> 8) & 0x00ff00ff);
+ }
+ else
+ {
+ return _byteswap_ulong( x );
+ }
+}
+
+BOOST_CXX14_CONSTEXPR inline boost::uint64_t byteswap_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
+ if( __builtin_is_constant_evaluated() )
+ {
+ boost::uint64_t step32 = x << 32 | x >> 32;
+ boost::uint64_t step16 = (step32 & 0x0000FFFF0000FFFFULL) << 16 | (step32 & 0xFFFF0000FFFF0000ULL) >> 16;
+ return (step16 & 0x00FF00FF00FF00FFULL) << 8 | (step16 & 0xFF00FF00FF00FF00ULL) >> 8;
+ }
+ else
+ {
+ return _byteswap_uint64( x );
+ }
+}
+
+#elif defined(_MSC_VER)
+
+inline boost::uint32_t byteswap_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
+ return _byteswap_ulong( x );
+}
+
+inline boost::uint64_t byteswap_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
+ return _byteswap_uint64( x );
+}
+
+#else
+
+BOOST_CXX14_CONSTEXPR inline boost::uint32_t byteswap_impl( boost::uint32_t x ) BOOST_NOEXCEPT
+{
+ boost::uint32_t step16 = x << 16 | x >> 16;
+ return ((step16 << 8) & 0xff00ff00) | ((step16 >> 8) & 0x00ff00ff);
+}
+
+BOOST_CXX14_CONSTEXPR inline boost::uint64_t byteswap_impl( boost::uint64_t x ) BOOST_NOEXCEPT
+{
+ boost::uint64_t step32 = x << 32 | x >> 32;
+ boost::uint64_t step16 = (step32 & 0x0000FFFF0000FFFFULL) << 16 | (step32 & 0xFFFF0000FFFF0000ULL) >> 16;
+ return (step16 & 0x00FF00FF00FF00FFULL) << 8 | (step16 & 0xFF00FF00FF00FF00ULL) >> 8;
+}
+
+#endif
+
+} // namespace detail
+
+template<class T> BOOST_CXX14_CONSTEXPR T byteswap( T x ) BOOST_NOEXCEPT
+{
+ BOOST_STATIC_ASSERT( std::numeric_limits<T>::is_integer );
+
+ BOOST_STATIC_ASSERT( sizeof(T) == sizeof(boost::uint8_t) || sizeof(T) == sizeof(boost::uint16_t) || sizeof(T) == sizeof(boost::uint32_t) || sizeof(T) == sizeof(boost::uint64_t) );
+
+ BOOST_IF_CONSTEXPR ( sizeof(T) == sizeof(boost::uint8_t) )
+ {
+ return static_cast<T>( boost::core::detail::byteswap_impl( static_cast<boost::uint8_t>( x ) ) );
+ }
+ else BOOST_IF_CONSTEXPR ( sizeof(T) == sizeof(boost::uint16_t) )
+ {
+ return static_cast<T>( boost::core::detail::byteswap_impl( static_cast<boost::uint16_t>( x ) ) );
+ }
+ else BOOST_IF_CONSTEXPR ( sizeof(T) == sizeof(boost::uint32_t) )
+ {
+ return static_cast<T>( boost::core::detail::byteswap_impl( static_cast<boost::uint32_t>( x ) ) );
+ }
+ else
+ {
+ return static_cast<T>( boost::core::detail::byteswap_impl( static_cast<boost::uint64_t>( x ) ) );
+ }
+}
+
} // namespace core
} // namespace boost
diff --git a/contrib/restricted/boost/core/include/boost/core/checked_delete.hpp b/contrib/restricted/boost/core/include/boost/core/checked_delete.hpp
index 6af5c14119..b74a43afab 100644
--- a/contrib/restricted/boost/core/include/boost/core/checked_delete.hpp
+++ b/contrib/restricted/boost/core/include/boost/core/checked_delete.hpp
@@ -30,16 +30,33 @@ namespace boost
template<class T> inline void checked_delete(T * x) BOOST_NOEXCEPT
{
- // intentionally complex - simplification causes regressions
- typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+#if defined(__cpp_static_assert) && __cpp_static_assert >= 200410L
+
+ static_assert( sizeof(T) != 0, "Type must be complete" );
+
+#else
+
+ typedef char type_must_be_complete[ sizeof(T) ];
(void) sizeof(type_must_be_complete);
+
+#endif
+
delete x;
}
template<class T> inline void checked_array_delete(T * x) BOOST_NOEXCEPT
{
- typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+#if defined(__cpp_static_assert) && __cpp_static_assert >= 200410L
+
+ static_assert( sizeof(T) != 0, "Type must be complete" );
+
+#else
+
+ typedef char type_must_be_complete[ sizeof(T) ];
(void) sizeof(type_must_be_complete);
+
+#endif
+
delete [] x;
}
diff --git a/contrib/restricted/boost/core/ya.make b/contrib/restricted/boost/core/ya.make
index d3b77e1637..126af6a736 100644
--- a/contrib/restricted/boost/core/ya.make
+++ b/contrib/restricted/boost/core/ya.make
@@ -9,9 +9,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(1.82.0)
+VERSION(1.83.0)
-ORIGINAL_SOURCE(https://github.com/boostorg/core/archive/boost-1.82.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/boostorg/core/archive/boost-1.83.0.tar.gz)
PEERDIR(
contrib/restricted/boost/assert