24#ifndef SQL_JOIN_OPTIMIZER_BIT_UTILS_H
25#define SQL_JOIN_OPTIMIZER_BIT_UTILS_H 1
35template <
class Policy>
68#if defined(__GNUC__) && defined(__x86_64__)
83 asm(
"bsfq %1,%q0" :
"=r"(idx) :
"rm"(x));
86 return std::countr_zero(x);
102 return state & (state - 1);
112 return std::countl_zero(state) ^ 63u;
119 return state & ~(uint64_t{1} <<
NextValue(state));
178constexpr uint64_t
TableBitmap(
unsigned x) {
return uint64_t{1} << x; }
181template <
typename... Args>
198 return -(uint64_t{1} <<
start);
201 return (uint64_t{1} <<
end) - (uint64_t{1} <<
start);
221inline
bool IsSubset(uint64_t x, uint64_t y) {
return (x & y) == x; }
229inline bool Overlaps(uint64_t x, uint64_t y) {
return (x & y) != 0; }
233 return Overlaps(x, uint64_t{1} << bit_num);
bool IsProperSubset(uint64_t x, uint64_t y)
Returns whether X is a proper subset of Y.
Definition: bit_utils.h:224
uint64_t TablesBetween(unsigned start, unsigned end)
Definition: bit_utils.h:207
BitIteratorAdaptor< CountBitsDescending > BitsSetInDescending(uint64_t state)
Definition: bit_utils.h:126
bool IsSubset(uint64_t x, uint64_t y)
Definition: bit_utils.h:221
constexpr uint64_t TableBitmap(unsigned x)
Definition: bit_utils.h:178
uint64_t IsolateLowestBit(uint64_t x)
Definition: bit_utils.h:217
bool Overlaps(uint64_t x, uint64_t y)
Definition: bit_utils.h:229
uint64_t BitsBetween(unsigned start, unsigned end)
Definition: bit_utils.h:191
bool IsBitSet(int bit_num, uint64_t x)
Definition: bit_utils.h:232
BitIteratorAdaptor< CountBitsAscending > BitsSetIn(uint64_t state)
Definition: bit_utils.h:123
size_t FindLowestBitSet(uint64_t x)
Definition: bit_utils.h:66
Definition: bit_utils.h:38
bool operator!=(const iterator &other) const
Definition: bit_utils.h:47
iterator & operator++()
Definition: bit_utils.h:51
size_t operator*() const
Definition: bit_utils.h:50
uint64_t m_state
Definition: bit_utils.h:40
bool operator==(const iterator &other) const
Definition: bit_utils.h:44
iterator(uint64_t state)
Definition: bit_utils.h:43
Definition: bit_utils.h:36
const uint64_t m_initial_state
Definition: bit_utils.h:63
BitIteratorAdaptor(uint64_t state)
Definition: bit_utils.h:57
iterator begin() const
Definition: bit_utils.h:59
iterator end() const
Definition: bit_utils.h:60
Definition: bit_utils.h:92
static size_t NextValue(uint64_t state)
Definition: bit_utils.h:94
static uint64_t AdvanceState(uint64_t state)
Definition: bit_utils.h:99
Definition: bit_utils.h:107
static size_t NextValue(uint64_t state)
Definition: bit_utils.h:109
static uint64_t AdvanceState(uint64_t state)
Definition: bit_utils.h:115
Definition: bit_utils.h:141
bool operator!=(const iterator &other) const
Definition: bit_utils.h:152
uint64_t m_state
Definition: bit_utils.h:143
iterator & operator++()
Definition: bit_utils.h:157
uint64_t operator*() const
Definition: bit_utils.h:156
iterator(uint64_t state, uint64_t set)
Definition: bit_utils.h:147
uint64_t m_set
Definition: bit_utils.h:144
bool operator==(const iterator &other) const
Definition: bit_utils.h:148
Definition: bit_utils.h:139
NonzeroSubsetsOf(uint64_t set)
Definition: bit_utils.h:163
iterator end() const
Definition: bit_utils.h:171
const uint64_t m_set
Definition: bit_utils.h:174
iterator begin() const
Definition: bit_utils.h:169
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
Header for compiler-dependent features.
#define MY_COMPILER_MSVC_DIAGNOSTIC_IGNORE(X)
Definition: my_compiler.h:255
#define MY_COMPILER_DIAGNOSTIC_PUSH()
save the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:285
#define MY_COMPILER_DIAGNOSTIC_POP()
restore the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:286
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:192
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2882