include/structures/bitmap.h View source View on GitHub
typedef unsigned long bitmap_word_t;
void bitmap_set(bitmap_word_t *map, size_t bit);
void bitmap_clear(bitmap_word_t *map, size_t bit);
void bitmap_toggle(bitmap_word_t *map, size_t bit);
bool bitmap_test(const bitmap_word_t *map, size_t bit);
bool bitmap_test_and_set(bitmap_word_t *map, size_t bit);
bool bitmap_test_and_clear(bitmap_word_t *map, size_t bit);
void bitmap_zero(bitmap_word_t *map, size_t nbits);
void bitmap_fill(bitmap_word_t *map, size_t nbits);
void bitmap_set_range(bitmap_word_t *map, size_t start, size_t len);
void bitmap_clear_range(bitmap_word_t *map, size_t start, size_t len);
size_t bitmap_weight(const bitmap_word_t *map, size_t nbits);
size_t bitmap_find_first_set(const bitmap_word_t *map, size_t nbits);
size_t bitmap_find_first_zero(const bitmap_word_t *map, size_t nbits);
#define BITMAP_BITS_PER_WORD (sizeof(bitmap_word_t) * 8)
#define BITMAP_WORDS(nbits) \
(((nbits) + BITMAP_BITS_PER_WORD - 1) / BITMAP_BITS_PER_WORD)
#define BITMAP_DECLARE(name, nbits) bitmap_word_t name[BITMAP_WORDS(nbits)]
#define BITMAP_WORD_INDEX(bit) ((bit) / BITMAP_BITS_PER_WORD)
#define BITMAP_BIT_OFFSET(bit) ((bit) % BITMAP_BITS_PER_WORD)
#define BITMAP_BIT_MASK(bit) ((bitmap_word_t) 1 << BITMAP_BIT_OFFSET(bit))
#define bitmap_for_each_bit_set(bit, map, nbits) \
for (size_t bit = 0; bit < (nbits); bit++) \
if (bitmap_test((map), (bit)))
#define bitmap_for_each_bit_unset(bit, map, nbits) \
for (size_t bit = 0; bit < (nbits); bit++) \
if (!bitmap_test((map), (bit)))