23#ifndef SQL_JOIN_OPTIMIZER_BIT_UTILS_H
24#define SQL_JOIN_OPTIMIZER_BIT_UTILS_H 1
33#pragma intrinsic(_BitScanForward64)
34#pragma intrinsic(_BitScanReverse64)
39template <
class Policy>
74 _BitScanForward64(&idx, x);
76#elif defined(__GNUC__) && defined(__x86_64__)
83 asm(
"bsfq %1,%q0" :
"=r"(idx) :
"rm"(x));
87 return static_cast<unsigned>(ffsll(x)) - 1u;
103 return state & (state - 1);
115 _BitScanReverse64(&idx, state);
118 return __builtin_clzll(state) ^ 63u;
126 return state & ~(uint64_t{1} <<
NextValue(state));
185constexpr uint64_t
TableBitmap(
unsigned x) {
return uint64_t{1} << x; }
188template <
typename... Args>
205 return -(uint64_t{1} <<
start);
208 return (uint64_t{1} <<
end) - (uint64_t{1} <<
start);
228inline
bool IsSubset(uint64_t x, uint64_t y) {
return (x & y) == x; }
236inline bool Overlaps(uint64_t x, uint64_t y) {
return (x & y) != 0; }
248 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:231
uint64_t TablesBetween(unsigned start, unsigned end)
Definition: bit_utils.h:214
bool AreMultipleBitsSet(uint64_t x)
Definition: bit_utils.h:239
bool IsSingleBitSet(uint64_t x)
Definition: bit_utils.h:242
BitIteratorAdaptor< CountBitsDescending > BitsSetInDescending(uint64_t state)
Definition: bit_utils.h:133
bool IsSubset(uint64_t x, uint64_t y)
Definition: bit_utils.h:228
constexpr uint64_t TableBitmap(unsigned x)
Definition: bit_utils.h:185
uint64_t IsolateLowestBit(uint64_t x)
Definition: bit_utils.h:224
bool Overlaps(uint64_t x, uint64_t y)
Definition: bit_utils.h:236
uint64_t BitsBetween(unsigned start, unsigned end)
Definition: bit_utils.h:198
bool IsBitSet(int bit_num, uint64_t x)
Definition: bit_utils.h:247
int PopulationCount(uint64_t x)
Definition: bit_utils.h:252
BitIteratorAdaptor< CountBitsAscending > BitsSetIn(uint64_t state)
Definition: bit_utils.h:130
size_t FindLowestBitSet(uint64_t x)
Definition: bit_utils.h:70
Definition: bit_utils.h:42
bool operator!=(const iterator &other) const
Definition: bit_utils.h:51
iterator & operator++()
Definition: bit_utils.h:55
size_t operator*() const
Definition: bit_utils.h:54
uint64_t m_state
Definition: bit_utils.h:44
bool operator==(const iterator &other) const
Definition: bit_utils.h:48
iterator(uint64_t state)
Definition: bit_utils.h:47
Definition: bit_utils.h:40
const uint64_t m_initial_state
Definition: bit_utils.h:67
BitIteratorAdaptor(uint64_t state)
Definition: bit_utils.h:61
iterator begin() const
Definition: bit_utils.h:63
iterator end() const
Definition: bit_utils.h:64
Definition: bit_utils.h:93
static size_t NextValue(uint64_t state)
Definition: bit_utils.h:95
static uint64_t AdvanceState(uint64_t state)
Definition: bit_utils.h:100
Definition: bit_utils.h:108
static size_t NextValue(uint64_t state)
Definition: bit_utils.h:110
static uint64_t AdvanceState(uint64_t state)
Definition: bit_utils.h:122
Definition: bit_utils.h:148
bool operator!=(const iterator &other) const
Definition: bit_utils.h:159
uint64_t m_state
Definition: bit_utils.h:150
iterator & operator++()
Definition: bit_utils.h:164
uint64_t operator*() const
Definition: bit_utils.h:163
iterator(uint64_t state, uint64_t set)
Definition: bit_utils.h:154
uint64_t m_set
Definition: bit_utils.h:151
bool operator==(const iterator &other) const
Definition: bit_utils.h:155
Definition: bit_utils.h:146
NonzeroSubsetsOf(uint64_t set)
Definition: bit_utils.h:170
iterator end() const
Definition: bit_utils.h:178
const uint64_t m_set
Definition: bit_utils.h:181
iterator begin() const
Definition: bit_utils.h:176
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:176
Header for compiler-dependent features.
#define MY_COMPILER_MSVC_DIAGNOSTIC_IGNORE(X)
Definition: my_compiler.h:254
#define MY_COMPILER_DIAGNOSTIC_PUSH()
save the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:284
#define MY_COMPILER_DIAGNOSTIC_POP()
restore the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:285
static int count
Definition: myisam_ftdump.cc:44
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:191
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2881