68626249c3
Summary: Refactoring to consolidate implementation details of legacy Bloom filters. This helps to organize and document some related, obscure code. Also added make/cpp var TEST_CACHE_LINE_SIZE so that it's easy to compile and run unit tests for non-native cache line size. (Fixed a related test failure in db_properties_test.) Pull Request resolved: https://github.com/facebook/rocksdb/pull/5784 Test Plan: make check, including Recently added Bloom schema unit tests (in ./plain_table_db_test && ./bloom_test), and including with TEST_CACHE_LINE_SIZE=128U and TEST_CACHE_LINE_SIZE=256U. Tested the schema tests with temporary fault injection into new implementations. Some performance testing with modified unit tests suggest a small to moderate improvement in speed. Differential Revision: D17381384 Pulled By: pdillinger fbshipit-source-id: ee42586da996798910fc45ac0b6289147f16d8df
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
// (found in the LICENSE.Apache file in the root directory).
|
|
|
|
#pragma once
|
|
|
|
namespace folly {
|
|
template <typename T>
|
|
constexpr T constexpr_max(T a) {
|
|
return a;
|
|
}
|
|
template <typename T, typename... Ts>
|
|
constexpr T constexpr_max(T a, T b, Ts... ts) {
|
|
return b < a ? constexpr_max(a, ts...) : constexpr_max(b, ts...);
|
|
}
|
|
|
|
namespace detail {
|
|
template <typename T>
|
|
constexpr T constexpr_log2_(T a, T e) {
|
|
return e == T(1) ? a : constexpr_log2_(a + T(1), e / T(2));
|
|
}
|
|
|
|
template <typename T>
|
|
constexpr T constexpr_log2_ceil_(T l2, T t) {
|
|
return l2 + T(T(1) << l2 < t ? 1 : 0);
|
|
}
|
|
|
|
template <typename T>
|
|
constexpr T constexpr_square_(T t) {
|
|
return t * t;
|
|
}
|
|
} // namespace detail
|
|
|
|
template <typename T>
|
|
constexpr T constexpr_log2(T t) {
|
|
return detail::constexpr_log2_(T(0), t);
|
|
}
|
|
|
|
template <typename T>
|
|
constexpr T constexpr_log2_ceil(T t) {
|
|
return detail::constexpr_log2_ceil_(constexpr_log2(t), t);
|
|
}
|
|
|
|
} // namespace folly
|