29#ifndef SQL_BITMAP_INCLUDED
30#define SQL_BITMAP_INCLUDED
41template <u
int default_w
idth>
50 explicit Bitmap(uint prefix_to_set) {
init(prefix_to_set); }
52 void init(uint prefix_to_set) {
56 uint
length()
const {
return default_width; }
78 const_cast<uchar *
>(
static_cast<uchar *
>(
static_cast<void *
>(&buf2))),
81 assert(
sizeof(
buffer) >= 4);
83 const_cast<uchar *
>(
static_cast<uchar *
>(
static_cast<void *
>(&buf2))),
84 static_cast<uint32>(map2buff));
94 (map2buff & (1LL << (
sizeof(
ulonglong) * 8 - 1))));
114 const uchar *e = pointer_cast<const uchar *>(&
buffer[0]);
116 while (*b == 0 && b > e) {
134 static_cast<const uchar *
>(
static_cast<const void *
>(
buffer)));
135 assert(
sizeof(
buffer) >= 4);
137 static_cast<const uchar *
>(
static_cast<const void *
>(
buffer)));
200 return (
map & map2.
map) != 0;
217 if (
map & (1ULL << i))
return i;
227 for (uint i = bit_no + 1; i <
ALL_BITS; i++)
228 if (
map & (1ULL << i))
return i;
241 static const char last_bit[16] = {32, 0, 1, 0, 2, 0, 1, 0,
242 3, 0, 1, 0, 2, 0, 1, 0};
244 while ((bit = last_bit[
bmp & 0xF]) == 32) {
249 bmp &= ~(1LL << bit);
257#elif MAX_INDEXES > 255
258#error "MAX_INDEXES values greater than 255 is not supported."
Definition: sql_bitmap.h:153
char * print(char *buf) const
Definition: sql_bitmap.h:204
Bitmap(uint prefix_to_set)
Definition: sql_bitmap.h:160
bool is_set(uint n) const
Definition: sql_bitmap.h:185
void set_all()
Definition: sql_bitmap.h:178
bool operator==(const Bitmap< 64 > &map2) const
Definition: sql_bitmap.h:202
Bitmap()
Definition: sql_bitmap.h:157
void init(uint prefix_to_set)
Definition: sql_bitmap.h:162
void intersect(const Bitmap< 64 > &map2)
Definition: sql_bitmap.h:180
void clear_all()
Definition: sql_bitmap.h:179
void set_bit(uint n)
Definition: sql_bitmap.h:164
uint bits_set() const
Definition: sql_bitmap.h:209
ulonglong to_ulonglong() const
Definition: sql_bitmap.h:208
ulonglong map
Definition: sql_bitmap.h:154
bool is_subset(const Bitmap< 64 > &map2) const
Definition: sql_bitmap.h:198
void intersect(ulonglong map2)
Definition: sql_bitmap.h:181
uint length() const
Definition: sql_bitmap.h:163
void set_prefix(uint n)
Definition: sql_bitmap.h:172
bool is_overlapping(const Bitmap< 64 > &map2) const
Definition: sql_bitmap.h:199
bool is_clear_all() const
Definition: sql_bitmap.h:196
bool is_set_all() const
Definition: sql_bitmap.h:197
uint get_first_set() const
Definition: sql_bitmap.h:215
void intersect_extended(ulonglong map2)
Definition: sql_bitmap.h:182
bool operator!=(const Bitmap< 64 > &map2) const
Definition: sql_bitmap.h:203
void merge(const Bitmap< 64 > &map2)
Definition: sql_bitmap.h:184
void init()
Definition: sql_bitmap.h:161
void subtract(const Bitmap< 64 > &map2)
Definition: sql_bitmap.h:183
uint get_next_set(uint bit_no) const
Find the next set bit after 'bit_no'.
Definition: sql_bitmap.h:226
bool is_prefix(uint n) const
Definition: sql_bitmap.h:189
void clear_bit(uint n)
Definition: sql_bitmap.h:168
Definition: sql_bitmap.h:42
void intersect(const Bitmap &map2)
Definition: sql_bitmap.h:67
uint get_next_set(uint bit_no) const
Find the next set bit after 'bit_no'.
Definition: sql_bitmap.h:147
char * print(char *buf) const
Definition: sql_bitmap.h:112
void set_all()
Definition: sql_bitmap.h:65
Bitmap(uint prefix_to_set)
Definition: sql_bitmap.h:50
void intersect_extended(ulonglong map2buff)
Definition: sql_bitmap.h:90
void set_prefix(uint n)
Definition: sql_bitmap.h:64
void clear_all()
Definition: sql_bitmap.h:66
MY_BITMAP map
Definition: sql_bitmap.h:43
@ ALL_BITS
Definition: sql_bitmap.h:47
bool is_subset(const Bitmap &map2) const
Definition: sql_bitmap.h:102
void clear_bit(uint n)
Definition: sql_bitmap.h:63
void merge(const Bitmap &map2)
Definition: sql_bitmap.h:97
ulonglong to_ulonglong() const
Definition: sql_bitmap.h:131
bool is_set_all() const
Definition: sql_bitmap.h:101
void subtract(const Bitmap &map2)
Definition: sql_bitmap.h:96
bool is_prefix(uint n) const
Definition: sql_bitmap.h:99
Bitmap & operator=(const Bitmap &map2)
Definition: sql_bitmap.h:57
bool is_clear_all() const
Definition: sql_bitmap.h:100
uint length() const
Definition: sql_bitmap.h:56
uint get_first_set() const
Definition: sql_bitmap.h:140
uint32 buffer[(default_width+31)/32]
Definition: sql_bitmap.h:44
bool operator!=(const Bitmap &map2) const
Definition: sql_bitmap.h:111
void init()
Definition: sql_bitmap.h:51
void init(uint prefix_to_set)
Definition: sql_bitmap.h:52
bool operator==(const Bitmap &map2) const
Definition: sql_bitmap.h:108
void intersect(ulonglong map2buff)
Definition: sql_bitmap.h:68
Bitmap()
Definition: sql_bitmap.h:48
bool is_set(uint n) const
Definition: sql_bitmap.h:98
bool is_overlapping(const Bitmap &map2) const
Definition: sql_bitmap.h:105
void set_bit(uint n)
Definition: sql_bitmap.h:62
uint bits_set() const
Definition: sql_bitmap.h:139
Bitmap(const Bitmap &from)
Definition: sql_bitmap.h:49
Definition: sql_bitmap.h:234
int next_bit()
Definition: sql_bitmap.h:240
Table_map_iterator(ulonglong t)
Definition: sql_bitmap.h:239
uint no
Definition: sql_bitmap.h:236
ulonglong bmp
Definition: sql_bitmap.h:235
@ BITMAP_END
Definition: sql_bitmap.h:252
static char buf[MAX_BUF]
Definition: conf_to_src.cc:72
constexpr std::array< const char, 37 > dig_vec_upper
Definition: dig_vec.h:33
#define MAX_INDEXES
Definition: config.h:209
static char * longlong2str(int64_t val, char *dst, int radix)
Definition: int2str.h:40
#define MY_BIT_NONE
Definition: my_bitmap.h:31
static bool bitmap_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2)
Quite unlike other C comparison functions ending with 'cmp', e.g.
Definition: my_bitmap.h:107
bool bitmap_is_overlapping(const MY_BITMAP *map1, const MY_BITMAP *map2)
Definition: my_bitmap.cc:300
static void bitmap_set_all(MY_BITMAP *map)
Definition: my_bitmap.h:127
bool bitmap_is_clear_all(const MY_BITMAP *map)
Definition: my_bitmap.cc:267
static bool bitmap_is_set(const MY_BITMAP *map, uint bit)
Definition: my_bitmap.h:94
bool bitmap_is_set_all(const MY_BITMAP *map)
Definition: my_bitmap.cc:256
static void bitmap_clear_all(MY_BITMAP *map)
Definition: my_bitmap.h:120
void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2)
Definition: my_bitmap.cc:379
uint bitmap_bits_set(const MY_BITMAP *map)
Definition: my_bitmap.cc:415
void bitmap_intersect(MY_BITMAP *to, const MY_BITMAP *from)
Definition: my_bitmap.cc:334
uint bitmap_get_next_set(const MY_BITMAP *map, uint bitmap_bit)
Get the next set bit.
Definition: my_bitmap.cc:461
void bitmap_set_above(MY_BITMAP *map, uint from_byte, bool use_bit)
Definition: my_bitmap.cc:371
uint bitmap_get_first_set(const MY_BITMAP *map)
Definition: my_bitmap.cc:438
bool bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits)
Definition: my_bitmap.cc:139
void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2)
Definition: my_bitmap.cc:388
static void bitmap_clear_bit(MY_BITMAP *map, uint bit)
Definition: my_bitmap.h:89
void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size)
Set the specified number of bits in the bitmap buffer.
Definition: my_bitmap.cc:200
bool bitmap_is_subset(const MY_BITMAP *map1, const MY_BITMAP *map2)
Definition: my_bitmap.cc:280
static void bitmap_set_bit(MY_BITMAP *map, uint bit)
Definition: my_bitmap.h:79
bool bitmap_is_prefix(const MY_BITMAP *map, uint prefix_size)
Definition: my_bitmap.cc:217
Functions for reading and storing in machine-independent format.
void int4store(char *pT, uint32 A)
Definition: my_byteorder.h:172
ulonglong uint8korr(const char *pT)
Definition: my_byteorder.h:156
void int8store(char *pT, ulonglong A)
Definition: my_byteorder.h:184
uint32 uint4korr(const char *pT)
Definition: my_byteorder.h:144
unsigned long long int ulonglong
Definition: my_inttypes.h:55
unsigned char uchar
Definition: my_inttypes.h:51
uint32_t uint32
Definition: my_inttypes.h:66
Definition: buf0block_hint.cc:29
Bitmap< 64 > Key_map
Definition: sql_bitmap.h:256
Definition: my_bitmap.h:42
uint n_bits
Definition: my_bitmap.h:44
int n
Definition: xcom_base.cc:508