]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/multiprecision/detail/bitscan.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / multiprecision / detail / bitscan.hpp
index c675532f20edd909dbcbf9c0d28ef11c7b78c41e..9c79fdd0c5ebbafb680535b03b78023b0b5d6906 100644 (file)
@@ -8,8 +8,11 @@
 #ifndef BOOST_MP_DETAIL_BITSCAN_HPP
 #define BOOST_MP_DETAIL_BITSCAN_HPP
 
-#include <boost/predef/other/endian.h>
-#include <boost/cstdint.hpp>
+#include <cstdint>
+#include <climits>
+#include <type_traits>
+#include <boost/multiprecision/detail/endian.hpp>
+#include <boost/multiprecision/detail/standalone_config.hpp>
 
 #if (defined(BOOST_MSVC) || (defined(__clang__) && defined(__c2__)) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && (defined(_M_IX86) || defined(_M_X64))
 #include <intrin.h>
@@ -18,9 +21,9 @@
 namespace boost { namespace multiprecision { namespace detail {
 
 template <class Unsigned>
-inline BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb_default(Unsigned mask)
+inline BOOST_MP_CXX14_CONSTEXPR std::size_t find_lsb_default(Unsigned mask)
 {
-   unsigned result = 0;
+   std::size_t result = 0;
    while (!(mask & 1u))
    {
       mask >>= 1;
@@ -30,9 +33,9 @@ inline BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb_default(Unsigned mask)
 }
 
 template <class Unsigned>
-inline BOOST_MP_CXX14_CONSTEXPR unsigned find_msb_default(Unsigned mask)
+inline BOOST_MP_CXX14_CONSTEXPR std::size_t find_msb_default(Unsigned mask)
 {
-   unsigned index = 0;
+   std::size_t index = 0;
    while (mask)
    {
       ++index;
@@ -42,13 +45,13 @@ inline BOOST_MP_CXX14_CONSTEXPR unsigned find_msb_default(Unsigned mask)
 }
 
 template <class Unsigned>
-inline BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask, const mpl::int_<0>&)
+inline BOOST_MP_CXX14_CONSTEXPR std::size_t find_lsb(Unsigned mask, const std::integral_constant<int, 0>&)
 {
    return find_lsb_default(mask);
 }
 
 template <class Unsigned>
-inline BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask, const mpl::int_<0>&)
+inline BOOST_MP_CXX14_CONSTEXPR std::size_t find_msb(Unsigned mask, const std::integral_constant<int, 0>&)
 {
    return find_msb_default(mask);
 }
@@ -57,14 +60,14 @@ inline BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask, const mpl::int_
 
 #pragma intrinsic(_BitScanForward, _BitScanReverse)
 
-BOOST_FORCEINLINE unsigned find_lsb(unsigned long mask, const mpl::int_<1>&)
+BOOST_FORCEINLINE std::size_t find_lsb(unsigned long mask, const std::integral_constant<int, 1>&)
 {
    unsigned long result;
    _BitScanForward(&result, mask);
    return result;
 }
 
-BOOST_FORCEINLINE unsigned find_msb(unsigned long mask, const mpl::int_<1>&)
+BOOST_FORCEINLINE std::size_t find_msb(unsigned long mask, const std::integral_constant<int, 1>&)
 {
    unsigned long result;
    _BitScanReverse(&result, mask);
@@ -74,14 +77,14 @@ BOOST_FORCEINLINE unsigned find_msb(unsigned long mask, const mpl::int_<1>&)
 
 #pragma intrinsic(_BitScanForward64, _BitScanReverse64)
 
-BOOST_FORCEINLINE unsigned find_lsb(unsigned __int64 mask, const mpl::int_<2>&)
+BOOST_FORCEINLINE std::size_t find_lsb(unsigned __int64 mask, const std::integral_constant<int, 2>&)
 {
    unsigned long result;
    _BitScanForward64(&result, mask);
    return result;
 }
 template <class Unsigned>
-BOOST_FORCEINLINE unsigned find_msb(Unsigned mask, const mpl::int_<2>&)
+BOOST_FORCEINLINE std::size_t find_msb(Unsigned mask, const std::integral_constant<int, 2>&)
 {
    unsigned long result;
    _BitScanReverse64(&result, mask);
@@ -90,21 +93,21 @@ BOOST_FORCEINLINE unsigned find_msb(Unsigned mask, const mpl::int_<2>&)
 #endif
 
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_lsb(Unsigned mask)
 {
-   typedef typename make_unsigned<Unsigned>::type ui_type;
-   typedef typename mpl::if_c<
+   using ui_type = typename boost::multiprecision::detail::make_unsigned<Unsigned>::type;
+   using tag_type = typename std::conditional<
        sizeof(Unsigned) <= sizeof(unsigned long),
-       mpl::int_<1>,
+       std::integral_constant<int, 1>,
 #ifdef _M_X64
-       typename mpl::if_c<
+       typename std::conditional<
            sizeof(Unsigned) <= sizeof(__int64),
-           mpl::int_<2>,
-           mpl::int_<0> >::type
+           std::integral_constant<int, 2>,
+           std::integral_constant<int, 0> >::type
 #else
-       mpl::int_<0>
+       std::integral_constant<int, 0>
 #endif
-       >::type tag_type;
+       >::type;
 #ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
    if (BOOST_MP_IS_CONST_EVALUATED(mask))
    {
@@ -116,21 +119,21 @@ BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask)
 }
 
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_msb(Unsigned mask)
 {
-   typedef typename make_unsigned<Unsigned>::type ui_type;
-   typedef typename mpl::if_c<
+   using ui_type = typename boost::multiprecision::detail::make_unsigned<Unsigned>::type;
+   using tag_type = typename std::conditional<
        sizeof(Unsigned) <= sizeof(unsigned long),
-       mpl::int_<1>,
+       std::integral_constant<int, 1>,
 #ifdef _M_X64
-       typename mpl::if_c<
+       typename std::conditional<
            sizeof(Unsigned) <= sizeof(__int64),
-           mpl::int_<2>,
-           mpl::int_<0> >::type
+           std::integral_constant<int, 2>,
+           std::integral_constant<int, 0> >::type
 #else
-       mpl::int_<0>
+       std::integral_constant<int, 0>
 #endif
-       >::type tag_type;
+       >::type;
 #ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
    if (BOOST_MP_IS_CONST_EVALUATED(mask))
    {
@@ -143,86 +146,84 @@ BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask)
 
 #elif defined(BOOST_GCC) || defined(__clang__) || (defined(BOOST_INTEL) && defined(__GNUC__))
 
-BOOST_FORCEINLINE unsigned find_lsb(unsigned mask, mpl::int_<1> const&)
+BOOST_FORCEINLINE std::size_t find_lsb(std::size_t mask, std::integral_constant<int, 1> const&)
 {
    return __builtin_ctz(mask);
 }
-BOOST_FORCEINLINE unsigned find_lsb(unsigned long mask, mpl::int_<2> const&)
+BOOST_FORCEINLINE std::size_t find_lsb(unsigned long mask, std::integral_constant<int, 2> const&)
 {
    return __builtin_ctzl(mask);
 }
-BOOST_FORCEINLINE unsigned find_lsb(boost::ulong_long_type mask, mpl::int_<3> const&)
+BOOST_FORCEINLINE std::size_t find_lsb(unsigned long long mask, std::integral_constant<int, 3> const&)
 {
    return __builtin_ctzll(mask);
 }
-BOOST_FORCEINLINE unsigned find_msb(unsigned mask, mpl::int_<1> const&)
+BOOST_FORCEINLINE std::size_t find_msb(std::size_t mask, std::integral_constant<int, 1> const&)
 {
    return sizeof(unsigned) * CHAR_BIT - 1 - __builtin_clz(mask);
 }
-BOOST_FORCEINLINE unsigned find_msb(unsigned long mask, mpl::int_<2> const&)
+BOOST_FORCEINLINE std::size_t find_msb(unsigned long mask, std::integral_constant<int, 2> const&)
 {
    return sizeof(unsigned long) * CHAR_BIT - 1 - __builtin_clzl(mask);
 }
-BOOST_FORCEINLINE unsigned find_msb(boost::ulong_long_type mask, mpl::int_<3> const&)
+BOOST_FORCEINLINE std::size_t find_msb(unsigned long long mask, std::integral_constant<int, 3> const&)
 {
-   return sizeof(boost::ulong_long_type) * CHAR_BIT - 1 - __builtin_clzll(mask);
+   return sizeof(unsigned long long) * CHAR_BIT - 1 - __builtin_clzll(mask);
 }
 #ifdef BOOST_HAS_INT128
 
-__extension__ typedef unsigned __int128 uint128_type;
-
-BOOST_FORCEINLINE unsigned find_msb(uint128_type mask, mpl::int_<0> const&)
+BOOST_FORCEINLINE std::size_t find_msb(uint128_type mask, std::integral_constant<int, 0> const&)
 {
    union
    {
       uint128_type    v;
-      boost::uint64_t sv[2];
+      std::uint64_t sv[2];
    } val;
    val.v = mask;
-#if BOOST_ENDIAN_LITTLE_BYTE
+#if BOOST_MP_ENDIAN_LITTLE_BYTE
    if (val.sv[1])
-      return find_msb(val.sv[1], mpl::int_<3>()) + 64;
-   return find_msb(val.sv[0], mpl::int_<3>());
+      return find_msb(val.sv[1], std::integral_constant<int, 3>()) + 64;
+   return find_msb(val.sv[0], std::integral_constant<int, 3>());
 #else
    if (val.sv[0])
-      return find_msb(val.sv[0], mpl::int_<3>()) + 64;
-   return find_msb(val.sv[1], mpl::int_<3>());
+      return find_msb(val.sv[0], std::integral_constant<int, 3>()) + 64;
+   return find_msb(val.sv[1], std::integral_constant<int, 3>());
 #endif
 }
-BOOST_FORCEINLINE unsigned find_lsb(uint128_type mask, mpl::int_<0> const&)
+BOOST_FORCEINLINE std::size_t find_lsb(uint128_type mask, std::integral_constant<int, 0> const&)
 {
    union
    {
       uint128_type    v;
-      boost::uint64_t sv[2];
+      std::uint64_t sv[2];
    } val;
    val.v = mask;
-#if BOOST_ENDIAN_LITTLE_BYTE
+#if BOOST_MP_ENDIAN_LITTLE_BYTE
    if (val.sv[0] == 0)
-      return find_lsb(val.sv[1], mpl::int_<3>()) + 64;
-   return find_lsb(val.sv[0], mpl::int_<3>());
+      return find_lsb(val.sv[1], std::integral_constant<int, 3>()) + 64;
+   return find_lsb(val.sv[0], std::integral_constant<int, 3>());
 #else
    if (val.sv[1] == 0)
-      return find_lsb(val.sv[0], mpl::int_<3>()) + 64;
-   return find_lsb(val.sv[1], mpl::int_<3>());
+      return find_lsb(val.sv[0], std::integral_constant<int, 3>()) + 64;
+   return find_lsb(val.sv[1], std::integral_constant<int, 3>());
 #endif
 }
 #endif
 
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_lsb(Unsigned mask)
 {
-   typedef typename make_unsigned<Unsigned>::type ui_type;
-   typedef typename mpl::if_c<
+   using ui_type = typename boost::multiprecision::detail::make_unsigned<Unsigned>::type;
+   using tag_type = typename std::conditional<
        sizeof(Unsigned) <= sizeof(unsigned),
-       mpl::int_<1>,
-       typename mpl::if_c<
+       std::integral_constant<int, 1>,
+       typename std::conditional<
            sizeof(Unsigned) <= sizeof(unsigned long),
-           mpl::int_<2>,
-           typename mpl::if_c<
-               sizeof(Unsigned) <= sizeof(boost::ulong_long_type),
-               mpl::int_<3>,
-               mpl::int_<0> >::type>::type>::type tag_type;
+           std::integral_constant<int, 2>,
+           typename std::conditional<
+               sizeof(Unsigned) <= sizeof(unsigned long long),
+               std::integral_constant<int, 3>,
+               std::integral_constant<int, 0> >::type>::type>::type;
 #ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
    if (BOOST_MP_IS_CONST_EVALUATED(mask))
    {
@@ -233,19 +234,19 @@ BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask)
    return find_lsb(static_cast<ui_type>(mask), tag_type());
 }
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_msb(Unsigned mask)
 {
-   typedef typename make_unsigned<Unsigned>::type ui_type;
-   typedef typename mpl::if_c<
+   using ui_type = typename boost::multiprecision::detail::make_unsigned<Unsigned>::type;
+   using tag_type = typename std::conditional<
        sizeof(Unsigned) <= sizeof(unsigned),
-       mpl::int_<1>,
-       typename mpl::if_c<
+       std::integral_constant<int, 1>,
+       typename std::conditional<
            sizeof(Unsigned) <= sizeof(unsigned long),
-           mpl::int_<2>,
-           typename mpl::if_c<
-               sizeof(Unsigned) <= sizeof(boost::ulong_long_type),
-               mpl::int_<3>,
-               mpl::int_<0> >::type>::type>::type tag_type;
+           std::integral_constant<int, 2>,
+           typename std::conditional<
+               sizeof(Unsigned) <= sizeof(unsigned long long),
+               std::integral_constant<int, 3>,
+               std::integral_constant<int, 0> >::type>::type>::type;
 #ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
    if (BOOST_MP_IS_CONST_EVALUATED(mask))
    {
@@ -256,22 +257,22 @@ BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask)
       return find_msb(static_cast<ui_type>(mask), tag_type());
 }
 #elif defined(BOOST_INTEL)
-BOOST_FORCEINLINE unsigned find_lsb(unsigned mask, mpl::int_<1> const&)
+BOOST_FORCEINLINE std::size_t find_lsb(std::size_t mask, std::integral_constant<int, 1> const&)
 {
    return _bit_scan_forward(mask);
 }
-BOOST_FORCEINLINE unsigned find_msb(unsigned mask, mpl::int_<1> const&)
+BOOST_FORCEINLINE std::size_t find_msb(std::size_t mask, std::integral_constant<int, 1> const&)
 {
    return _bit_scan_reverse(mask);
 }
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_lsb(Unsigned mask)
 {
-   typedef typename make_unsigned<Unsigned>::type ui_type;
-   typedef typename mpl::if_c<
+   using ui_type = typename boost::multiprecision::detail::make_unsigned<Unsigned>::type;
+   using tag_type = typename std::conditional<
        sizeof(Unsigned) <= sizeof(unsigned),
-       mpl::int_<1>,
-       mpl::int_<0> >::type tag_type;
+       std::integral_constant<int, 1>,
+       std::integral_constant<int, 0> >::type;
 #ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
    if (BOOST_MP_IS_CONST_EVALUATED(mask))
    {
@@ -282,13 +283,13 @@ BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask)
       return find_lsb(static_cast<ui_type>(mask), tag_type());
 }
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_msb(Unsigned mask)
 {
-   typedef typename make_unsigned<Unsigned>::type ui_type;
-   typedef typename mpl::if_c<
+   using ui_type = typename boost::multiprecision::detail::make_unsigned<Unsigned>::type;
+   using tag_type = typename std::conditional<
        sizeof(Unsigned) <= sizeof(unsigned),
-       mpl::int_<1>,
-       mpl::int_<0> >::type tag_type;
+       std::integral_constant<int, 1>,
+       std::integral_constant<int, 0> >::type;
 #ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
    if (BOOST_MP_IS_CONST_EVALUATED(mask))
    {
@@ -300,14 +301,14 @@ BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask)
 }
 #else
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_lsb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_lsb(Unsigned mask)
 {
-   return find_lsb(mask, mpl::int_<0>());
+   return find_lsb(mask, std::integral_constant<int, 0>());
 }
 template <class Unsigned>
-BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR unsigned find_msb(Unsigned mask)
+BOOST_FORCEINLINE BOOST_MP_CXX14_CONSTEXPR std::size_t find_msb(Unsigned mask)
 {
-   return find_msb(mask, mpl::int_<0>());
+   return find_msb(mask, std::integral_constant<int, 0>());
 }
 #endif