26#ifndef CBITS_BITVECTOR_H
27#define CBITS_BITVECTOR_H
46#define BV_WORDS_SUPER_SHIFT 3
51#define BV_WORDS_SUPER (1u << BV_WORDS_SUPER_SHIFT)
void bv_set_range(BitVector *bv, size_t start, size_t len)
Set all bits in the half-open range [start, start+len).
Definition bitvector_range.c:53
void bv_free(BitVector *bv)
Free all memory associated with a BitVector.
Definition bitvector_core.c:101
void bv_flip_range(BitVector *bv, size_t start, size_t len)
Toggle (flip) all bits in the half-open range [start, start+len).
Definition bitvector_range.c:124
bool bv_contains_subvector(const BitVector *a, const BitVector *b)
Check weather B appears as a contiguous sub-bitvector of A.
Definition bitvector_compare.c:36
void bv_build_rank(BitVector *bv)
Build or rebuild the rank tables for a BitVector.
Definition bitvector_rank.c:21
BitVector * bv_new(size_t n_bits)
Allocate a new BitVector with all bits cleared.
Definition bitvector_core.c:34
BitVector * bv_concat(const BitVector *a, const BitVector *b)
Concatenate two BitVectors into a new BitVector.
Definition bitvector_sequence.c:54
void bv_clear_range(BitVector *bv, size_t start, size_t len)
Clear all bits in the half-open range [start, start+len).
Definition bitvector_range.c:89
void bv_clear(BitVector *bv, const size_t pos)
Clear the bit at a given position (set to 0)
Definition bitvector_core.c:130
int bv_get(const BitVector *bv, const size_t pos)
Get the bit value at a given position.
Definition bitvector_core.c:113
BitVector * bv_copy(const BitVector *src)
Make a copy of an existing BitVector.
Definition bitvector_core.c:79
bool bv_equal(const BitVector *a, const BitVector *b)
Test equality of two BitVectors.
Definition bitvector_compare.c:18
void bv_flip(BitVector *bv, const size_t pos)
Toggle (flip) the bit at a given position.
Definition bitvector_core.c:139
void bv_set(BitVector *bv, const size_t pos)
Set the bit at a given position (set to 1)
Definition bitvector_core.c:121
size_t bv_rank(BitVector *bv, const size_t pos)
Compute the rank (number of set bits) up to a position.
Definition bitvector_rank.c:81
BitVector * bv_repeat(const BitVector *bv, const size_t count)
Repeat a BitVector n times.
Definition bitvector_sequence.c:71
Cross-platform aligned allocators, popcount, prefetch.
Packed bit array with rank-support structures.
Definition bitvector.h:60
uint64_t * data
Definition bitvector.h:61
size_t n_bits
Definition bitvector.h:62
uint16_t * block_rank
Definition bitvector.h:65
size_t * super_rank
Definition bitvector.h:64
size_t n_words
Definition bitvector.h:63
bool rank_dirty
Definition bitvector.h:66