diff --git a/base/base_tests/bits_test.cpp b/base/base_tests/bits_test.cpp index c2a43733ea..5263246dae 100644 --- a/base/base_tests/bits_test.cpp +++ b/base/base_tests/bits_test.cpp @@ -120,14 +120,14 @@ UNIT_TEST(PopCount64) UNIT_TEST(CeilLog) { - TEST_EQUAL(0, bits::CeilLog(0x0), ()); - TEST_EQUAL(0, bits::CeilLog(0x1), ()); - TEST_EQUAL(1, bits::CeilLog(0x2), ()); - TEST_EQUAL(1, bits::CeilLog(0x3), ()); - TEST_EQUAL(2, bits::CeilLog(0x4), ()); + TEST_EQUAL(0, bits::FloorLog(0x0), ()); + TEST_EQUAL(0, bits::FloorLog(0x1), ()); + TEST_EQUAL(1, bits::FloorLog(0x2), ()); + TEST_EQUAL(1, bits::FloorLog(0x3), ()); + TEST_EQUAL(2, bits::FloorLog(0x4), ()); - TEST_EQUAL(6, bits::CeilLog(0x7f), ()); - TEST_EQUAL(7, bits::CeilLog(0x80), ()); - TEST_EQUAL(31, bits::CeilLog(0xFFFFFFFF), ()); - TEST_EQUAL(63, bits::CeilLog(0xFFFFFFFFFFFFFFFF), ()); + TEST_EQUAL(6, bits::FloorLog(0x7f), ()); + TEST_EQUAL(7, bits::FloorLog(0x80), ()); + TEST_EQUAL(31, bits::FloorLog(0xFFFFFFFF), ()); + TEST_EQUAL(63, bits::FloorLog(0xFFFFFFFFFFFFFFFF), ()); } diff --git a/base/bits.hpp b/base/bits.hpp index ad0eeac236..fda447185a 100644 --- a/base/bits.hpp +++ b/base/bits.hpp @@ -70,7 +70,7 @@ namespace bits return static_cast(x); } - inline uint8_t CeilLog(uint64_t x) noexcept + inline uint8_t FloorLog(uint64_t x) noexcept { #define CHECK_RSH(x, msb, offset) \ if (x >> offset) \ diff --git a/base/small_set.hpp b/base/small_set.hpp index de1dad1406..35c7afe7a1 100644 --- a/base/small_set.hpp +++ b/base/small_set.hpp @@ -54,7 +54,7 @@ public: { ASSERT_NOT_EQUAL(m_current_block, 0, ()); auto const bit = m_current_block & -m_current_block; - return bits::PopCount(bit - 1) + m_current_block_index * 64; + return bits::FloorLog(bit) + m_current_block_index * 64; } Iterator const & operator++() diff --git a/coding/compressed_bit_vector.cpp b/coding/compressed_bit_vector.cpp index d52eaffb6d..88a863c27f 100644 --- a/coding/compressed_bit_vector.cpp +++ b/coding/compressed_bit_vector.cpp @@ -434,7 +434,7 @@ unique_ptr CompressedBitVectorBuilder::FromBitGroups( if (bitGroups.empty()) return make_unique(move(bitGroups)); - uint64_t const maxBit = kBlockSize * (bitGroups.size() - 1) + bits::CeilLog(bitGroups.back()); + uint64_t const maxBit = kBlockSize * (bitGroups.size() - 1) + bits::FloorLog(bitGroups.back()); uint64_t popCount = 0; for (size_t i = 0; i < bitGroups.size(); ++i) popCount += bits::PopCount(bitGroups[i]); diff --git a/coding/elias_coder.hpp b/coding/elias_coder.hpp index e7cc92e494..47b183b4b1 100644 --- a/coding/elias_coder.hpp +++ b/coding/elias_coder.hpp @@ -18,7 +18,7 @@ public: if (value == 0) return false; - uint8_t const n = bits::CeilLog(value); + uint8_t const n = bits::FloorLog(value); ASSERT_LESS_OR_EQUAL(n, 63, ()); uint64_t const msb = static_cast(1) << n; @@ -50,7 +50,7 @@ public: if (value == 0) return false; - uint8_t const n = bits::CeilLog(value); + uint8_t const n = bits::FloorLog(value); ASSERT_LESS_OR_EQUAL(n, 63, ()); if (!GammaCoder::Encode(writer, n + 1)) return false;