Skip to content

Bitmap

include/structures/bitmap.h View source View on GitHub
typedef uint64_t bitmap_word_t
source
void bitmap_set(bitmap_word_t *map, size_t bit)
source
void bitmap_clear(bitmap_word_t *map, size_t bit)
source
void bitmap_toggle(bitmap_word_t *map, size_t bit)
source
bool bitmap_test(const bitmap_word_t *map, size_t bit)
source
bool bitmap_test_and_set(bitmap_word_t *map, size_t bit)
source
bool bitmap_test_and_clear(bitmap_word_t *map, size_t bit)
source
void bitmap_atomic_set(bitmap_word_t *map, size_t bit)
source
void bitmap_atomic_clear(bitmap_word_t *map, size_t bit)
source
void bitmap_atomic_toggle(bitmap_word_t *map, size_t bit)
source
bool bitmap_atomic_test(const bitmap_word_t *map, size_t bit)
source
bool bitmap_atomic_test_and_set(bitmap_word_t *map, size_t bit)
source
bool bitmap_atomic_test_and_clear(bitmap_word_t *map, size_t bit)
source
void bitmap_zero(bitmap_word_t *map, size_t nbits)
source
void bitmap_copy(
    bitmap_word_t *dst,
    const bitmap_word_t *src,
    size_t nbits
)
source
void bitmap_fill(bitmap_word_t *map, size_t nbits)
source
void bitmap_set_range(bitmap_word_t *map, size_t start, size_t len)
source
void bitmap_clear_range(bitmap_word_t *map, size_t start, size_t len)
source
void bitmap_and(
    bitmap_word_t *dst,
    const bitmap_word_t *src1,
    const bitmap_word_t *src2,
    size_t nbits
)
source
void bitmap_or(
    bitmap_word_t *dst,
    const bitmap_word_t *src1,
    const bitmap_word_t *src2,
    size_t nbits
)
source
void bitmap_xor(
    bitmap_word_t *dst,
    const bitmap_word_t *src1,
    const bitmap_word_t *src2,
    size_t nbits
)
source
void bitmap_andnot(
    bitmap_word_t *dst,
    const bitmap_word_t *src1,
    const bitmap_word_t *src2,
    size_t nbits
)
source
bool bitmap_equal(
    const bitmap_word_t *src1,
    const bitmap_word_t *src2,
    size_t nbits
)
source
bool bitmap_intersects(
    const bitmap_word_t *src1,
    const bitmap_word_t *src2,
    size_t nbits
)
source
bool bitmap_subset(
    const bitmap_word_t *subset,
    const bitmap_word_t *superset,
    size_t nbits
)
source
bool bitmap_empty(const bitmap_word_t *map, size_t nbits)
source
bool bitmap_full(const bitmap_word_t *map, size_t nbits)
source
size_t bitmap_weight(const bitmap_word_t *map, size_t nbits)
source
size_t bitmap_find_first_set(const bitmap_word_t *map, size_t nbits)
source
size_t bitmap_find_first_zero(const bitmap_word_t *map, size_t nbits)
source
size_t bitmap_find_next_bit(
    const bitmap_word_t *map,
    size_t nbits,
    size_t start
)
source
size_t bitmap_find_next_zero_bit(
    const bitmap_word_t *map,
    size_t nbits,
    size_t start
)
source
#define BITMAP_BITS_PER_WORD 64
source
#define BITMAP_WORDS(nbits)
source
Expansion
#define BITMAP_WORDS(nbits) \
    ({ \
        __auto_type __nbits = (nbits); \
        ct_typecheck_widenable_to((size_t) 0, nbits); \
        DIV_ROUND_UP((size_t) __nbits, BITMAP_BITS_PER_WORD); \
    })

Integer constant expression variant

#define BITMAP_WORDS_CONST(nbits)
source
Expansion
#define BITMAP_WORDS_CONST(nbits) \
    (((nbits) / BITMAP_BITS_PER_WORD) + !!((nbits) % BITMAP_BITS_PER_WORD))
#define BITMAP_DECLARE(name, nbits)
source
Expansion
#define BITMAP_DECLARE(name, nbits) \
    bitmap_word_t name[BITMAP_WORDS_CONST(nbits)]
#define BITMAP_DECLARE_ATOMIC(name, nbits)
source
Expansion
#define BITMAP_DECLARE_ATOMIC(name, nbits) \
    atomic(bitmap_word_t) name[BITMAP_WORDS_CONST(nbits)]
#define BITMAP_WORD_INDEX(bit)
source
Expansion
#define BITMAP_WORD_INDEX(bit) ((bit) / BITMAP_BITS_PER_WORD)
#define BITMAP_BIT_OFFSET(bit)
source
Expansion
#define BITMAP_BIT_OFFSET(bit) ((bit) % BITMAP_BITS_PER_WORD)
#define BITMAP_BIT_MASK(bit)
source
Expansion
#define BITMAP_BIT_MASK(bit) ((bitmap_word_t) BIT(BITMAP_BIT_OFFSET(bit)))
#define bitmap_for_each_bit_set(bit, map, nbits)
source
Expansion
#define bitmap_for_each_bit_set(bit, map, nbits) \
    for (bit = 0; bit < (nbits); bit++) \
        if (bitmap_test((map), (bit)))
#define bitmap_for_each_bit_unset(bit, map, nbits)
source
Expansion
#define bitmap_for_each_bit_unset(bit, map, nbits) \
    for (bit = 0; bit < (nbits); bit++) \
        if (!bitmap_test((map), (bit)))