mirror of
https://github.com/boostorg/intrusive.git
synced 2025-08-02 14:04:36 +02:00
Fixes #60 ("Licensing question for math.hpp"). Removes questioned, SO-based code since it was just an alternative version for non-MSVC/non-GCC compatible compilers.
This commit is contained in:
@@ -3889,7 +3889,8 @@ to be inserted in intrusive containers are allocated using `std::vector` or `std
|
|||||||
[section:release_notes_boost_1_77_00 Boost 1.77 Release]
|
[section:release_notes_boost_1_77_00 Boost 1.77 Release]
|
||||||
|
|
||||||
* Fixed bugs:
|
* Fixed bugs:
|
||||||
* [@https://github.com/boostorg/intrusive/pull/57 GitHub #57: ['UB: comparing unrelated pointers]]
|
* [@https://github.com/boostorg/intrusive/pull/57 GitHub #57: ['UB: comparing unrelated pointers]]
|
||||||
|
* [@https://github.com/boostorg/intrusive/issues/60 GitHub #60: ['Licensing question for math.hpp]]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
@@ -150,53 +150,6 @@ namespace detail {
|
|||||||
return log2;
|
return log2;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////
|
|
||||||
// DeBruijn method
|
|
||||||
////////////////////////////
|
|
||||||
|
|
||||||
//Taken from:
|
|
||||||
//http://stackoverflow.com/questions/11376288/fast-computing-of-log2-for-64-bit-integers
|
|
||||||
//Thanks to Desmond Hume
|
|
||||||
|
|
||||||
inline std::size_t floor_log2 (std::size_t v, integral_constant<std::size_t, 32>)
|
|
||||||
{
|
|
||||||
static const int MultiplyDeBruijnBitPosition[32] =
|
|
||||||
{
|
|
||||||
0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30,
|
|
||||||
8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31
|
|
||||||
};
|
|
||||||
|
|
||||||
v |= v >> 1;
|
|
||||||
v |= v >> 2;
|
|
||||||
v |= v >> 4;
|
|
||||||
v |= v >> 8;
|
|
||||||
v |= v >> 16;
|
|
||||||
|
|
||||||
return MultiplyDeBruijnBitPosition[(std::size_t)(v * 0x07C4ACDDU) >> 27];
|
|
||||||
}
|
|
||||||
|
|
||||||
inline std::size_t floor_log2 (std::size_t v, integral_constant<std::size_t, 64>)
|
|
||||||
{
|
|
||||||
static const std::size_t MultiplyDeBruijnBitPosition[64] = {
|
|
||||||
63, 0, 58, 1, 59, 47, 53, 2,
|
|
||||||
60, 39, 48, 27, 54, 33, 42, 3,
|
|
||||||
61, 51, 37, 40, 49, 18, 28, 20,
|
|
||||||
55, 30, 34, 11, 43, 14, 22, 4,
|
|
||||||
62, 57, 46, 52, 38, 26, 32, 41,
|
|
||||||
50, 36, 17, 19, 29, 10, 13, 21,
|
|
||||||
56, 45, 25, 31, 35, 16, 9, 12,
|
|
||||||
44, 24, 15, 8, 23, 7, 6, 5};
|
|
||||||
|
|
||||||
v |= v >> 1;
|
|
||||||
v |= v >> 2;
|
|
||||||
v |= v >> 4;
|
|
||||||
v |= v >> 8;
|
|
||||||
v |= v >> 16;
|
|
||||||
v |= v >> 32;
|
|
||||||
return MultiplyDeBruijnBitPosition[((std::size_t)((v - (v >> 1))*0x07EDD5E59A4E28C2ULL)) >> 58];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline std::size_t floor_log2 (std::size_t x)
|
inline std::size_t floor_log2 (std::size_t x)
|
||||||
{
|
{
|
||||||
const std::size_t Bits = sizeof(std::size_t)*CHAR_BIT;
|
const std::size_t Bits = sizeof(std::size_t)*CHAR_BIT;
|
||||||
|
Reference in New Issue
Block a user