29
29
#include <mysys/my_bitmap.h>
31
template <uint default_width> class Bitmap
31
template <uint32_t default_width> class Bitmap
34
34
uint32_t buffer[(default_width+31)/32];
36
36
Bitmap() { init(); }
37
37
Bitmap(const Bitmap& from) { *this=from; }
38
explicit Bitmap(uint prefix_to_set) { init(prefix_to_set); }
38
explicit Bitmap(uint32_t prefix_to_set) { init(prefix_to_set); }
39
39
void init() { bitmap_init(&map, buffer, default_width, 0); }
40
void init(uint prefix_to_set) { init(); set_prefix(prefix_to_set); }
41
uint length() const { return default_width; }
40
void init(uint32_t prefix_to_set) { init(); set_prefix(prefix_to_set); }
41
uint32_t length() const { return default_width; }
42
42
Bitmap& operator=(const Bitmap& map2)
45
45
memcpy(buffer, map2.buffer, sizeof(buffer));
48
void set_bit(uint n) { bitmap_set_bit(&map, n); }
49
void clear_bit(uint n) { bitmap_clear_bit(&map, n); }
50
void set_prefix(uint n) { bitmap_set_prefix(&map, n); }
48
void set_bit(uint32_t n) { bitmap_set_bit(&map, n); }
49
void clear_bit(uint32_t n) { bitmap_clear_bit(&map, n); }
50
void set_prefix(uint32_t n) { bitmap_set_prefix(&map, n); }
51
51
void set_all() { bitmap_set_all(&map); }
52
52
void clear_all() { bitmap_clear_all(&map); }
53
53
void intersect(Bitmap& map2) { bitmap_intersect(&map, &map2.map); }
68
68
void subtract(Bitmap& map2) { bitmap_subtract(&map, &map2.map); }
69
69
void merge(Bitmap& map2) { bitmap_union(&map, &map2.map); }
70
bool is_set(uint n) const { return bitmap_is_set(&map, n); }
70
bool is_set(uint32_t n) const { return bitmap_is_set(&map, n); }
71
71
bool is_set() const { return !bitmap_is_clear_all(&map); }
72
bool is_prefix(uint n) const { return bitmap_is_prefix(&map, n); }
72
bool is_prefix(uint32_t n) const { return bitmap_is_prefix(&map, n); }
73
73
bool is_clear_all() const { return bitmap_is_clear_all(&map); }
74
74
bool is_set_all() const { return bitmap_is_set_all(&map); }
75
75
bool is_subset(const Bitmap& map2) const { return bitmap_is_subset(&map, &map2.map); }
76
76
bool is_overlapping(const Bitmap& map2) const { return bitmap_is_overlapping(&map, &map2.map); }
77
77
bool operator==(const Bitmap& map2) const { return bitmap_cmp(&map, &map2.map); }
78
78
bool operator!=(const Bitmap& map2) const { return !bitmap_cmp(&map, &map2.map); }
79
Bitmap operator&=(uint n)
79
Bitmap operator&=(uint32_t n)
81
81
if (bitmap_is_set(&map, n))
164
164
Bitmap<64>() { map= 0; }
165
explicit Bitmap<64>(uint prefix_to_set) { set_prefix(prefix_to_set); }
165
explicit Bitmap<64>(uint32_t prefix_to_set) { set_prefix(prefix_to_set); }
167
void init(uint prefix_to_set) { set_prefix(prefix_to_set); }
168
uint length() const { return 64; }
169
void set_bit(uint n) { map|= ((uint64_t)1) << n; }
170
void clear_bit(uint n) { map&= ~(((uint64_t)1) << n); }
171
void set_prefix(uint n)
167
void init(uint32_t prefix_to_set) { set_prefix(prefix_to_set); }
168
uint32_t length() const { return 64; }
169
void set_bit(uint32_t n) { map|= ((uint64_t)1) << n; }
170
void clear_bit(uint32_t n) { map&= ~(((uint64_t)1) << n); }
171
void set_prefix(uint32_t n)
173
173
if (n >= length())
182
182
void intersect_extended(uint64_t map2) { map&= map2; }
183
183
void subtract(Bitmap<64>& map2) { map&= ~map2.map; }
184
184
void merge(Bitmap<64>& map2) { map|= map2.map; }
185
bool is_set(uint n) const { return test(map & (((uint64_t)1) << n)); }
186
bool is_prefix(uint n) const { return map == (((uint64_t)1) << n)-1; }
185
bool is_set(uint32_t n) const { return test(map & (((uint64_t)1) << n)); }
186
bool is_prefix(uint32_t n) const { return map == (((uint64_t)1) << n)-1; }
187
187
bool is_clear_all() const { return map == (uint64_t)0; }
188
188
bool is_set_all() const { return map == ~(uint64_t)0; }
189
189
bool is_subset(const Bitmap<64>& map2) const { return !(map & ~map2.map); }