cbits 0.3.0
High-performance BitVector C-API & Python binding
 
Loading...
Searching...
No Matches
bitvector.h
Go to the documentation of this file.
1
26#ifndef CBITS_BITVECTOR_H
27#define CBITS_BITVECTOR_H
28
29#include <stdbool.h>
30#include "compat.h"
31
39#define BV_ALIGN 64
46#define BV_WORDS_SUPER_SHIFT 3
51#define BV_WORDS_SUPER (1u << BV_WORDS_SUPER_SHIFT)
52
60typedef struct {
61 uint64_t *data;
62 size_t n_bits;
63 size_t n_words;
64 size_t *super_rank;
65 uint16_t *block_rank;
67} BitVector;
68
76bv_new(size_t n_bits);
87bv_copy(const BitVector *src);
92void
94
104void
105bv_set_range(BitVector *bv, size_t start, size_t len);
115void
116bv_clear_range(BitVector *bv, size_t start, size_t len);
126void
127bv_flip_range(BitVector *bv, size_t start, size_t len);
128
136void
146size_t
147bv_rank(BitVector *bv, const size_t pos);
148
157bool
158bv_equal(const BitVector *a, const BitVector *b);
168bool
169bv_contains_subvector(const BitVector *a, const BitVector *b);
170
177int
178bv_get(const BitVector *bv, const size_t pos);
186void
187bv_set(BitVector *bv, const size_t pos);
195void
196bv_clear(BitVector *bv, const size_t pos);
204void
205bv_flip(BitVector *bv, const size_t pos);
218BitVector *
219bv_concat(const BitVector *a, const BitVector *b);
232BitVector *
233bv_repeat(const BitVector *bv, const size_t count);
234
235#endif /* CBITS_BITVECTOR_H */
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