CRoaring 4.7.2
Roaring bitmaps in C (and C++)
Loading...
Searching...
No Matches
roaring.h
Go to the documentation of this file.
1/*
2 * An implementation of Roaring Bitmaps in C.
3 *
4 * This is the main public header for the 32-bit CRoaring API. A Roaring bitmap
5 * represents a set of unsigned 32-bit integers by partitioning the value space
6 * into 16-bit chunks and storing each chunk in a container chosen to match the
7 * local data density. Sparse chunks are typically kept as sorted arrays,
8 * denser chunks as bitsets, and long consecutive runs as run containers.
9 *
10 * This hybrid representation aims to keep bitmaps compact while still
11 * supporting fast membership tests, iteration, rank/select queries,
12 * serialization, and set operations such as union, intersection, difference,
13 * and symmetric difference.
14 */
15
16#ifndef ROARING_H
17#define ROARING_H
18
19#include <stdbool.h>
20#include <stddef.h> // for `size_t`
21#include <stdint.h>
22
23#include <roaring/roaring_types.h>
24
25// Include other headers after roaring_types.h
26#include <roaring/bitset/bitset.h>
27#include <roaring/containers/containers.h>
28#include <roaring/memory.h>
29#include <roaring/portability.h>
30#include <roaring/roaring_array.h>
31#include <roaring/roaring_version.h>
32
33#ifdef __cplusplus
34extern "C" {
35namespace roaring {
36namespace api {
37#endif
38
42
50
59
66
75
81roaring_bitmap_t *roaring_bitmap_from_range(uint64_t min, uint64_t max,
82 uint32_t step);
83
88roaring_bitmap_t *roaring_bitmap_of_ptr(size_t n_args, const uint32_t *vals);
89
94
101
102/*
103 * Whether you want to use copy-on-write.
104 * Saves memory and avoids copies, but needs more care in a threaded context.
105 * Most users should ignore this flag.
106 *
107 * Note: If you do turn this flag to 'true', enabling COW, then ensure that you
108 * do so for all of your bitmaps, since interactions between bitmaps with and
109 * without COW is unsafe.
110 *
111 * When setting this flag to false, if any containers are shared, they
112 * are unshared (cloned) immediately.
113 */
115 return r->high_low_container.flags & ROARING_FLAG_COW;
116}
118 if (cow) {
119 r->high_low_container.flags |= ROARING_FLAG_COW;
120 } else {
123 }
124 r->high_low_container.flags &= ~ROARING_FLAG_COW;
125 }
126}
127
134 int64_t offset);
139
148CROARING_DEPRECATED roaring_bitmap_t *roaring_bitmap_of(size_t n, ...);
149
150#ifdef __cplusplus
157// Use an immediately invoked closure, capturing by reference
158// (in case __VA_ARGS__ refers to context outside the closure)
159// Include a 0 at the beginning of the array to make the array length > 0
160// (zero sized arrays are not valid in standard c/c++)
161#define roaring_bitmap_from(...) \
162 [&]() { \
163 const uint32_t roaring_bitmap_from_array[] = {0, __VA_ARGS__}; \
164 return roaring_bitmap_of_ptr((sizeof(roaring_bitmap_from_array) / \
165 sizeof(roaring_bitmap_from_array[0])) - \
166 1, \
167 &roaring_bitmap_from_array[1]); \
168 }()
169#else
176// While __VA_ARGS__ occurs twice in expansion, one of the times is in a sizeof
177// expression, which is an unevaluated context, so it's even safe in the case
178// where expressions passed have side effects (roaring64_bitmap_from(my_func(),
179// ++i))
180// Include a 0 at the beginning of the array to make the array length > 0
181// (zero sized arrays are not valid in standard c/c++)
182#define roaring_bitmap_from(...) \
183 roaring_bitmap_of_ptr( \
184 (sizeof((const uint32_t[]){0, __VA_ARGS__}) / sizeof(uint32_t)) - 1, \
185 &((const uint32_t[]){0, __VA_ARGS__})[1])
186#endif
187
194
208 const roaring_bitmap_t *src);
209
214
226 const roaring_bitmap_t *r2);
227
232 const roaring_bitmap_t *r2);
233
238 const roaring_bitmap_t *r2);
239
244 uint64_t y);
245
253 const roaring_bitmap_t *r2);
254
259 const roaring_bitmap_t *r2);
260
265 const roaring_bitmap_t *r2);
266
271 const roaring_bitmap_t *r2);
272
281 const roaring_bitmap_t *r2);
282
289 const roaring_bitmap_t *r2);
290
296 const roaring_bitmap_t *r2);
297
305 const roaring_bitmap_t **rs);
306
313 const roaring_bitmap_t **rs);
314
321 const roaring_bitmap_t *r2);
322
327 const roaring_bitmap_t *r2);
328
335 const roaring_bitmap_t **rs);
336
343 const roaring_bitmap_t *r2);
344
349 const roaring_bitmap_t *r2);
350
366
379 ROARING_CONTAINER_T *container;
380 int idx;
381 uint16_t key;
382 uint8_t typecode;
384
400 roaring_bulk_context_t *context, uint32_t val);
401
411 const uint32_t *vals);
412
417
423
428 uint32_t max);
429
433inline void roaring_bitmap_add_range(roaring_bitmap_t *r, uint64_t min,
434 uint64_t max) {
435 if (max <= min || min > (uint64_t)UINT32_MAX + 1) {
436 return;
437 }
438 roaring_bitmap_add_range_closed(r, (uint32_t)min, (uint32_t)(max - 1));
439}
440
445
450 uint32_t max);
451
456 uint64_t max) {
457 if (max <= min || min > (uint64_t)UINT32_MAX + 1) {
458 return;
459 }
460 roaring_bitmap_remove_range_closed(r, (uint32_t)min, (uint32_t)(max - 1));
461}
462
467 const uint32_t *vals);
468
474
478inline bool roaring_bitmap_contains(const roaring_bitmap_t *r, uint32_t val) {
479 // For performance reasons, this function is inline and uses internal
480 // functions directly.
481#ifdef __cplusplus
482 using namespace ::roaring::internal;
483#endif
484 const uint16_t hb = val >> 16;
485 /*
486 * the next function call involves a binary search and lots of branching.
487 */
488 int32_t i = ra_get_index(&r->high_low_container, hb);
489 if (i < 0) return false;
490
491 uint8_t typecode;
492 // next call ought to be cheap
493 container_t *container = ra_get_container_at_index(&r->high_low_container,
494 (uint16_t)i, &typecode);
495 // rest might be a tad expensive, possibly involving another round of binary
496 // search
497 return container_contains(container, val & 0xFFFF, typecode);
498}
499
505 uint64_t range_start, uint64_t range_end);
506
512 uint32_t range_start,
513 uint32_t range_end);
514
531 roaring_bulk_context_t *context,
532 uint32_t val);
533
538
543 uint64_t range_start,
544 uint64_t range_end);
545
550 uint32_t range_start,
551 uint32_t range_end);
556
563
572
589bool roaring_bitmap_to_bitset(const roaring_bitmap_t *r, bitset_t *bitset);
590
606 size_t limit, uint32_t *ans);
607
613
622
628
643size_t roaring_bitmap_serialize(const roaring_bitmap_t *r, char *buf);
644
654
683 size_t maxbytes);
684
690
714
747 size_t maxbytes);
748
773
782 size_t maxbytes);
783
791
807
808/*
809 * "Frozen" serialization format imitates memory layout of roaring_bitmap_t.
810 * Deserialized bitmap is a constant view of the underlying buffer.
811 * This significantly reduces amount of allocations and copying required during
812 * deserialization.
813 * It can be used with memory mapped files.
814 * Example can be found in benchmarks/frozen_benchmark.c
815 *
816 * [#####] const roaring_bitmap_t *
817 * | | |
818 * +----+ | +-+
819 * | | |
820 * [#####################################] underlying buffer
821 *
822 * Note that because frozen serialization format imitates C memory layout
823 * of roaring_bitmap_t, it is not fixed. It is different on big/little endian
824 * platforms and can be changed in future.
825 */
826
831
846
864 size_t length);
865
879bool roaring_iterate(const roaring_bitmap_t *r, roaring_iterator iterator,
880 void *ptr);
881
892bool roaring_iterate64(const roaring_bitmap_t *r, roaring_iterator64 iterator,
893 uint64_t high_bits, void *ptr);
894
899 const roaring_bitmap_t *r2);
900
905 const roaring_bitmap_t *r2);
906
912 const roaring_bitmap_t *r2);
913
932 const roaring_bitmap_t *r2,
933 const bool bitsetconversion);
934
944 const roaring_bitmap_t *r2,
945 const bool bitsetconversion);
946
954
969 const roaring_bitmap_t *r2);
970
977 const roaring_bitmap_t *r2);
978
986 uint64_t range_start, uint64_t range_end);
987
995 uint32_t range_start,
996 uint32_t range_end);
1003void roaring_bitmap_flip_inplace(roaring_bitmap_t *r1, uint64_t range_start,
1004 uint64_t range_end);
1005
1013 uint32_t range_start,
1014 uint32_t range_end);
1015
1022bool roaring_bitmap_select(const roaring_bitmap_t *r, uint32_t rank,
1023 uint32_t *element);
1024
1035uint64_t roaring_bitmap_rank(const roaring_bitmap_t *r, uint32_t x);
1036
1046void roaring_bitmap_rank_many(const roaring_bitmap_t *r, const uint32_t *begin,
1047 const uint32_t *end, uint64_t *ans);
1048
1056int64_t roaring_bitmap_get_index(const roaring_bitmap_t *r, uint32_t x);
1057
1062
1067
1075 roaring_statistics_t *stat);
1076
1092 const char **reason);
1093
1094
1116 const roaring_bitmap_t *parent; // Owner
1117 const ROARING_CONTAINER_T *container; // Current container
1118 uint8_t typecode; // Typecode of current container
1119 int32_t container_index; // Current container index
1120 uint32_t highbits; // High 16 bits of the current value
1121 roaring_container_iterator_t container_it;
1122
1126
1134
1136CROARING_DEPRECATED static inline void roaring_init_iterator(
1138 roaring_iterator_init(r, newit);
1139}
1140
1148
1150CROARING_DEPRECATED static inline void roaring_init_iterator_last(
1153}
1154
1164
1166CROARING_DEPRECATED static inline roaring_uint32_iterator_t *
1170
1181
1183CROARING_DEPRECATED static inline bool roaring_advance_uint32_iterator(
1186}
1187
1198
1200CROARING_DEPRECATED static inline bool roaring_previous_uint32_iterator(
1203}
1204
1211 uint32_t val);
1212
1214CROARING_DEPRECATED static inline bool
1219
1225 const roaring_uint32_iterator_t *it);
1226
1228CROARING_DEPRECATED static inline roaring_uint32_iterator_t *
1232
1237
1239CROARING_DEPRECATED static inline void roaring_free_uint32_iterator(
1242}
1243
1256 uint32_t *buf, uint32_t count);
1257
1259CROARING_DEPRECATED static inline uint32_t roaring_read_uint32_iterator(
1260 roaring_uint32_iterator_t *it, uint32_t *buf, uint32_t count) {
1261 return roaring_uint32_iterator_read(it, buf, count);
1262}
1263
1279 uint32_t *buf, uint32_t count);
1280
1291 uint32_t count);
1292
1303 uint32_t count);
1304
1309
1331 size_t count);
1332
1357 size_t count);
1358
1359#ifdef __cplusplus
1360}
1361}
1362} // extern "C" { namespace roaring { namespace api {
1363#endif
1364
1365#endif /* ROARING_H */
1366
1367#ifdef __cplusplus
1379#if !defined(ROARING_API_NOT_IN_GLOBAL_NAMESPACE)
1380using namespace ::roaring::api;
1381#endif
1382#endif
1383
1384// roaring64 will include roaring.h, but we would
1385// prefer to avoid having our users include roaring64.h
1386// in addition to roaring.h.
1387#include <roaring/roaring64.h>
bool roaring_bitmap_select(const roaring_bitmap_t *r, uint32_t rank, uint32_t *element)
roaring_bitmap_t * roaring_bitmap_create(void)
Definition roaring.h:56
roaring_bitmap_t * roaring_bitmap_flip(const roaring_bitmap_t *r1, uint64_t range_start, uint64_t range_end)
bool roaring_bitmap_add_checked(roaring_bitmap_t *r, uint32_t x)
void roaring_bitmap_andnot_inplace(roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
void roaring_bitmap_add_range_closed(roaring_bitmap_t *r, uint32_t min, uint32_t max)
size_t roaring_bitmap_portable_deserialize_size(const char *buf, size_t maxbytes)
bool roaring_bitmap_contains_bulk(const roaring_bitmap_t *r, roaring_bulk_context_t *context, uint32_t val)
roaring_bitmap_t * roaring_bitmap_create_with_capacity(uint32_t cap)
size_t roaring_bitmap_portable_serialize(const roaring_bitmap_t *r, char *buf)
bool roaring_bitmap_equals(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
void roaring_bitmap_flip_inplace(roaring_bitmap_t *r1, uint64_t range_start, uint64_t range_end)
size_t roaring_bitmap_shrink_to_fit(roaring_bitmap_t *r)
void roaring_iterator_init_last(const roaring_bitmap_t *r, roaring_uint32_iterator_t *newit)
void roaring_bitmap_remove_many(roaring_bitmap_t *r, size_t n_args, const uint32_t *vals)
bool roaring_unshare_all(roaring_bitmap_t *r)
void roaring_bitmap_clear(roaring_bitmap_t *r)
bool roaring_bitmap_intersect(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
bool roaring_iterate64(const roaring_bitmap_t *r, roaring_iterator64 iterator, uint64_t high_bits, void *ptr)
void roaring_bitmap_printf_describe(const roaring_bitmap_t *r)
bool roaring_bitmap_internal_validate(const roaring_bitmap_t *r, const char **reason)
static CROARING_DEPRECATED void roaring_init_iterator(const roaring_bitmap_t *r, roaring_uint32_iterator_t *newit)
Definition roaring.h:1136
static CROARING_DEPRECATED roaring_uint32_iterator_t * roaring_create_iterator(const roaring_bitmap_t *r)
Definition roaring.h:1167
roaring_bitmap_t * roaring_bitmap_copy(const roaring_bitmap_t *r)
bool roaring_bitmap_run_optimize(roaring_bitmap_t *r)
roaring_bitmap_t * roaring_bitmap_lazy_xor(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
void roaring_bitmap_and_inplace(roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
uint64_t roaring_bitmap_or_cardinality(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
static CROARING_DEPRECATED void roaring_init_iterator_last(const roaring_bitmap_t *r, roaring_uint32_iterator_t *newit)
Definition roaring.h:1150
roaring_bitmap_t * roaring_bitmap_or_many_heap(uint32_t number, const roaring_bitmap_t **rs)
void roaring_iterator_init(const roaring_bitmap_t *r, roaring_uint32_iterator_t *newit)
size_t roaring_bitmap_frozen_size_in_bytes(const roaring_bitmap_t *r)
uint64_t roaring_bitmap_range_cardinality(const roaring_bitmap_t *r, uint64_t range_start, uint64_t range_end)
bool roaring_bitmap_range_uint32_array(const roaring_bitmap_t *r, size_t offset, size_t limit, uint32_t *ans)
bool roaring_bitmap_get_copy_on_write(const roaring_bitmap_t *r)
Definition roaring.h:114
void roaring_bitmap_to_uint32_array(const roaring_bitmap_t *r, uint32_t *ans)
roaring_uint32_iterator_t * roaring_uint32_iterator_copy(const roaring_uint32_iterator_t *it)
roaring_bitmap_t * roaring_bitmap_portable_deserialize_frozen(const char *buf)
roaring_bitmap_t * roaring_bitmap_or_many(size_t number, const roaring_bitmap_t **rs)
bool roaring_bitmap_overwrite(roaring_bitmap_t *dest, const roaring_bitmap_t *src)
roaring_bitmap_t * roaring_bitmap_portable_deserialize(const char *buf)
void roaring_bitmap_xor_inplace(roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
bool roaring_uint32_iterator_move_equalorlarger(roaring_uint32_iterator_t *it, uint32_t val)
double roaring_bitmap_jaccard_index(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
size_t roaring_bitmap_size_in_bytes(const roaring_bitmap_t *r)
const roaring_bitmap_t * roaring_bitmap_frozen_view(const char *buf, size_t length)
uint32_t roaring_uint32_iterator_read_backward(roaring_uint32_iterator_t *it, uint32_t *buf, uint32_t count)
bool roaring_uint32_iterator_previous(roaring_uint32_iterator_t *it)
bool roaring_bitmap_remove_run_compression(roaring_bitmap_t *r)
bool roaring_iterate(const roaring_bitmap_t *r, roaring_iterator iterator, void *ptr)
void roaring_bitmap_init_cleared(roaring_bitmap_t *r)
Definition roaring.h:72
roaring_uint32_iterator_t * roaring_iterator_create(const roaring_bitmap_t *r)
void roaring_bitmap_add_bulk(roaring_bitmap_t *r, roaring_bulk_context_t *context, uint32_t val)
void roaring_bitmap_frozen_serialize(const roaring_bitmap_t *r, char *buf)
void roaring_bitmap_remove_range(roaring_bitmap_t *r, uint64_t min, uint64_t max)
Definition roaring.h:455
void roaring_bitmap_lazy_xor_inplace(roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
void roaring_bitmap_add_many(roaring_bitmap_t *r, size_t n_args, const uint32_t *vals)
bool roaring_bitmap_contains_range(const roaring_bitmap_t *r, uint64_t range_start, uint64_t range_end)
void roaring_bitmap_lazy_or_inplace(roaring_bitmap_t *r1, const roaring_bitmap_t *r2, const bool bitsetconversion)
size_t roaring_uint32_iterator_read_prev_ranges(roaring_uint32_iterator_t *it, roaring_uint32_range_closed_t *buf, size_t count)
bool roaring_bitmap_is_empty(const roaring_bitmap_t *r)
static CROARING_DEPRECATED bool roaring_previous_uint32_iterator(roaring_uint32_iterator_t *it)
Definition roaring.h:1200
roaring_bitmap_t * roaring_bitmap_portable_deserialize_safe(const char *buf, size_t maxbytes)
roaring_bitmap_t * roaring_bitmap_from_range(uint64_t min, uint64_t max, uint32_t step)
roaring_bitmap_t * roaring_bitmap_or(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
void roaring_bitmap_free(const roaring_bitmap_t *r)
uint32_t roaring_uint32_iterator_skip_backward(roaring_uint32_iterator_t *it, uint32_t count)
void roaring_bitmap_statistics(const roaring_bitmap_t *r, roaring_statistics_t *stat)
bool roaring_bitmap_contains(const roaring_bitmap_t *r, uint32_t val)
Definition roaring.h:478
void roaring_bitmap_remove(roaring_bitmap_t *r, uint32_t x)
roaring_bitmap_t * roaring_bitmap_add_offset(const roaring_bitmap_t *bm, int64_t offset)
uint32_t roaring_uint32_iterator_skip(roaring_uint32_iterator_t *it, uint32_t count)
void roaring_bitmap_set_copy_on_write(roaring_bitmap_t *r, bool cow)
Definition roaring.h:117
roaring_bitmap_t * roaring_bitmap_deserialize_safe(const void *buf, size_t maxbytes)
void roaring_bitmap_remove_range_closed(roaring_bitmap_t *r, uint32_t min, uint32_t max)
bool roaring_bitmap_is_strict_subset(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
roaring_bitmap_t * roaring_bitmap_lazy_or(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2, const bool bitsetconversion)
struct roaring_bitmap_s roaring_bitmap_t
uint64_t roaring_bitmap_xor_cardinality(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
roaring_bitmap_t * roaring_bitmap_flip_closed(const roaring_bitmap_t *x1, uint32_t range_start, uint32_t range_end)
bool roaring_bitmap_to_bitset(const roaring_bitmap_t *r, bitset_t *bitset)
uint64_t roaring_bitmap_andnot_cardinality(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
bool roaring_bitmap_intersect_with_range(const roaring_bitmap_t *bm, uint64_t x, uint64_t y)
roaring_bitmap_t * roaring_bitmap_deserialize(const void *buf)
size_t roaring_bitmap_portable_size_in_bytes(const roaring_bitmap_t *r)
static CROARING_DEPRECATED roaring_uint32_iterator_t * roaring_copy_uint32_iterator(const roaring_uint32_iterator_t *it)
Definition roaring.h:1229
bool roaring_bitmap_is_subset(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
static CROARING_DEPRECATED uint32_t roaring_read_uint32_iterator(roaring_uint32_iterator_t *it, uint32_t *buf, uint32_t count)
Definition roaring.h:1259
void roaring_bitmap_rank_many(const roaring_bitmap_t *r, const uint32_t *begin, const uint32_t *end, uint64_t *ans)
CROARING_DEPRECATED roaring_bitmap_t * roaring_bitmap_of(size_t n,...)
void roaring_bitmap_or_inplace(roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
uint32_t roaring_uint32_iterator_read(roaring_uint32_iterator_t *it, uint32_t *buf, uint32_t count)
uint64_t roaring_bitmap_rank(const roaring_bitmap_t *r, uint32_t x)
void roaring_uint32_iterator_free(roaring_uint32_iterator_t *it)
static CROARING_DEPRECATED bool roaring_move_uint32_iterator_equalorlarger(roaring_uint32_iterator_t *it, uint32_t val)
Definition roaring.h:1215
uint32_t roaring_bitmap_maximum(const roaring_bitmap_t *r)
bool roaring_contains_shared(const roaring_bitmap_t *r)
bool roaring_bitmap_init_with_capacity(roaring_bitmap_t *r, uint32_t cap)
roaring_bitmap_t * roaring_bitmap_xor_many(size_t number, const roaring_bitmap_t **rs)
void roaring_bitmap_add_range(roaring_bitmap_t *r, uint64_t min, uint64_t max)
Definition roaring.h:433
void roaring_bitmap_flip_inplace_closed(roaring_bitmap_t *r1, uint32_t range_start, uint32_t range_end)
int64_t roaring_bitmap_get_index(const roaring_bitmap_t *r, uint32_t x)
roaring_bitmap_t * roaring_bitmap_and(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
uint64_t roaring_bitmap_get_cardinality(const roaring_bitmap_t *r)
uint64_t roaring_bitmap_range_cardinality_closed(const roaring_bitmap_t *r, uint32_t range_start, uint32_t range_end)
size_t roaring_bitmap_serialize(const roaring_bitmap_t *r, char *buf)
uint64_t roaring_bitmap_and_cardinality(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
roaring_bitmap_t * roaring_bitmap_xor(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
struct roaring_bulk_context_s roaring_bulk_context_t
struct roaring_uint32_iterator_s roaring_uint32_iterator_t
bool roaring_bitmap_contains_range_closed(const roaring_bitmap_t *r, uint32_t range_start, uint32_t range_end)
bool roaring_bitmap_remove_checked(roaring_bitmap_t *r, uint32_t x)
static CROARING_DEPRECATED bool roaring_advance_uint32_iterator(roaring_uint32_iterator_t *it)
Definition roaring.h:1183
struct roaring_uint32_range_closed_s roaring_uint32_range_closed_t
void roaring_bitmap_repair_after_lazy(roaring_bitmap_t *r1)
void roaring_bitmap_printf(const roaring_bitmap_t *r)
bool roaring_uint32_iterator_advance(roaring_uint32_iterator_t *it)
static CROARING_DEPRECATED void roaring_free_uint32_iterator(roaring_uint32_iterator_t *it)
Definition roaring.h:1239
roaring_bitmap_t * roaring_bitmap_andnot(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
uint32_t roaring_bitmap_minimum(const roaring_bitmap_t *r)
roaring_bitmap_t * roaring_bitmap_of_ptr(size_t n_args, const uint32_t *vals)
size_t roaring_uint32_iterator_read_ranges(roaring_uint32_iterator_t *it, roaring_uint32_range_closed_t *buf, size_t count)
void roaring_bitmap_add(roaring_bitmap_t *r, uint32_t x)
roaring_array_t high_low_container
Definition roaring.h:40
ROARING_CONTAINER_T * container
Definition roaring.h:379
const roaring_bitmap_t * parent
Definition roaring.h:1116
const ROARING_CONTAINER_T * container
Definition roaring.h:1117
roaring_container_iterator_t container_it
Definition roaring.h:1121