CRoaring  4.2.1
Roaring bitmaps in C (and C++)
roaring.h
Go to the documentation of this file.
1 /*
2  * An implementation of Roaring Bitmaps in C.
3  */
4 
5 #ifndef ROARING_H
6 #define ROARING_H
7 
8 #include <stdbool.h>
9 #include <stddef.h> // for `size_t`
10 #include <stdint.h>
11 
12 #include <roaring/roaring_types.h>
13 
14 // Include other headers after roaring_types.h
15 #include <roaring/bitset/bitset.h>
16 #include <roaring/memory.h>
17 #include <roaring/portability.h>
18 #include <roaring/roaring_version.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 namespace roaring {
23 namespace api {
24 #endif
25 
26 typedef struct roaring_bitmap_s {
27  roaring_array_t high_low_container;
29 
37 
45 }
46 
53 
61 }
62 
67 roaring_bitmap_t *roaring_bitmap_from_range(uint64_t min, uint64_t max,
68  uint32_t step);
69 
73 roaring_bitmap_t *roaring_bitmap_of_ptr(size_t n_args, const uint32_t *vals);
74 
75 /*
76  * Whether you want to use copy-on-write.
77  * Saves memory and avoids copies, but needs more care in a threaded context.
78  * Most users should ignore this flag.
79  *
80  * Note: If you do turn this flag to 'true', enabling COW, then ensure that you
81  * do so for all of your bitmaps, since interactions between bitmaps with and
82  * without COW is unsafe.
83  */
85  return r->high_low_container.flags & ROARING_FLAG_COW;
86 }
88  if (cow) {
89  r->high_low_container.flags |= ROARING_FLAG_COW;
90  } else {
91  r->high_low_container.flags &= ~ROARING_FLAG_COW;
92  }
93 }
94 
96  int64_t offset);
101 
110 CROARING_DEPRECATED roaring_bitmap_t *roaring_bitmap_of(size_t n, ...);
111 
112 #ifdef __cplusplus
119 // Use an immediately invoked closure, capturing by reference
120 // (in case __VA_ARGS__ refers to context outside the closure)
121 // Include a 0 at the beginning of the array to make the array length > 0
122 // (zero sized arrays are not valid in standard c/c++)
123 #define roaring_bitmap_from(...) \
124  [&]() { \
125  const uint32_t roaring_bitmap_from_array[] = {0, __VA_ARGS__}; \
126  return roaring_bitmap_of_ptr((sizeof(roaring_bitmap_from_array) / \
127  sizeof(roaring_bitmap_from_array[0])) - \
128  1, \
129  &roaring_bitmap_from_array[1]); \
130  }()
131 #else
138 // While __VA_ARGS__ occurs twice in expansion, one of the times is in a sizeof
139 // expression, which is an unevaluated context, so it's even safe in the case
140 // where expressions passed have side effects (roaring64_bitmap_from(my_func(),
141 // ++i))
142 // Include a 0 at the beginning of the array to make the array length > 0
143 // (zero sized arrays are not valid in standard c/c++)
144 #define roaring_bitmap_from(...) \
145  roaring_bitmap_of_ptr( \
146  (sizeof((const uint32_t[]){0, __VA_ARGS__}) / sizeof(uint32_t)) - 1, \
147  &((const uint32_t[]){0, __VA_ARGS__})[1])
148 #endif
149 
155 
169  const roaring_bitmap_t *src);
170 
175 
186  const roaring_bitmap_t *r2);
187 
192  const roaring_bitmap_t *r2);
193 
198  const roaring_bitmap_t *r2);
199 
204  uint64_t y);
205 
213  const roaring_bitmap_t *r2);
214 
219  const roaring_bitmap_t *r2);
220 
225  const roaring_bitmap_t *r2);
226 
231  const roaring_bitmap_t *r2);
232 
241  const roaring_bitmap_t *r2);
242 
248  const roaring_bitmap_t *r2);
249 
255  const roaring_bitmap_t *r2);
256 
263  const roaring_bitmap_t **rs);
264 
271  const roaring_bitmap_t **rs);
272 
278  const roaring_bitmap_t *r2);
279 
284  const roaring_bitmap_t *r2);
285 
291  const roaring_bitmap_t **rs);
292 
298  const roaring_bitmap_t *r2);
299 
304  const roaring_bitmap_t *r2);
305 
321 
333 typedef struct roaring_bulk_context_s {
334  ROARING_CONTAINER_T *container;
335  int idx;
336  uint16_t key;
337  uint8_t typecode;
339 
355  roaring_bulk_context_t *context, uint32_t val);
356 
366  const uint32_t *vals);
367 
372 
378 
383  uint32_t max);
384 
388 inline void roaring_bitmap_add_range(roaring_bitmap_t *r, uint64_t min,
389  uint64_t max) {
390  if (max <= min || min > (uint64_t)UINT32_MAX + 1) {
391  return;
392  }
393  roaring_bitmap_add_range_closed(r, (uint32_t)min, (uint32_t)(max - 1));
394 }
395 
400 
405  uint32_t max);
406 
410 inline void roaring_bitmap_remove_range(roaring_bitmap_t *r, uint64_t min,
411  uint64_t max) {
412  if (max <= min || min > (uint64_t)UINT32_MAX + 1) {
413  return;
414  }
415  roaring_bitmap_remove_range_closed(r, (uint32_t)min, (uint32_t)(max - 1));
416 }
417 
422  const uint32_t *vals);
423 
429 
433 bool roaring_bitmap_contains(const roaring_bitmap_t *r, uint32_t val);
434 
440  uint64_t range_start, uint64_t range_end);
441 
447  uint32_t range_start,
448  uint32_t range_end);
449 
466  roaring_bulk_context_t *context,
467  uint32_t val);
468 
473 
478  uint64_t range_start,
479  uint64_t range_end);
480 
485  uint32_t range_start,
486  uint32_t range_end);
491 
498 
506 void roaring_bitmap_to_uint32_array(const roaring_bitmap_t *r, uint32_t *ans);
507 
524 bool roaring_bitmap_to_bitset(const roaring_bitmap_t *r, bitset_t *bitset);
525 
537  size_t limit, uint32_t *ans);
538 
544 
553 
559 
578 size_t roaring_bitmap_serialize(const roaring_bitmap_t *r, char *buf);
579 
591 
607  size_t maxbytes);
608 
614 
631 
666  size_t maxbytes);
667 
689 
698  size_t maxbytes);
699 
707 
727 
728 /*
729  * "Frozen" serialization format imitates memory layout of roaring_bitmap_t.
730  * Deserialized bitmap is a constant view of the underlying buffer.
731  * This significantly reduces amount of allocations and copying required during
732  * deserialization.
733  * It can be used with memory mapped files.
734  * Example can be found in benchmarks/frozen_benchmark.c
735  *
736  * [#####] const roaring_bitmap_t *
737  * | | |
738  * +----+ | +-+
739  * | | |
740  * [#####################################] underlying buffer
741  *
742  * Note that because frozen serialization format imitates C memory layout
743  * of roaring_bitmap_t, it is not fixed. It is different on big/little endian
744  * platforms and can be changed in future.
745  */
746 
751 
765 
782  size_t length);
783 
797 bool roaring_iterate(const roaring_bitmap_t *r, roaring_iterator iterator,
798  void *ptr);
799 
800 bool roaring_iterate64(const roaring_bitmap_t *r, roaring_iterator64 iterator,
801  uint64_t high_bits, void *ptr);
802 
807  const roaring_bitmap_t *r2);
808 
813  const roaring_bitmap_t *r2);
814 
820  const roaring_bitmap_t *r2);
821 
838  const roaring_bitmap_t *r2,
839  const bool bitsetconversion);
840 
850  const roaring_bitmap_t *r2,
851  const bool bitsetconversion);
852 
860 
873  const roaring_bitmap_t *r2);
874 
881  const roaring_bitmap_t *r2);
882 
889  uint64_t range_start, uint64_t range_end);
890 
897  uint32_t range_start,
898  uint32_t range_end);
905 void roaring_bitmap_flip_inplace(roaring_bitmap_t *r1, uint64_t range_start,
906  uint64_t range_end);
907 
915  uint32_t range_start,
916  uint32_t range_end);
917 
924 bool roaring_bitmap_select(const roaring_bitmap_t *r, uint32_t rank,
925  uint32_t *element);
926 
937 uint64_t roaring_bitmap_rank(const roaring_bitmap_t *r, uint32_t x);
938 
948 void roaring_bitmap_rank_many(const roaring_bitmap_t *r, const uint32_t *begin,
949  const uint32_t *end, uint64_t *ans);
950 
958 int64_t roaring_bitmap_get_index(const roaring_bitmap_t *r, uint32_t x);
959 
964 
969 
977  roaring_statistics_t *stat);
978 
994  const char **reason);
995 
996 
1017  const roaring_bitmap_t *parent; // Owner
1018  const ROARING_CONTAINER_T *container; // Current container
1019  uint8_t typecode; // Typecode of current container
1020  int32_t container_index; // Current container index
1021  uint32_t highbits; // High 16 bits of the current value
1022  roaring_container_iterator_t container_it;
1023 
1024  uint32_t current_value;
1027 
1034  roaring_uint32_iterator_t *newit);
1035 
1037 CROARING_DEPRECATED static inline void roaring_init_iterator(
1038  const roaring_bitmap_t *r, roaring_uint32_iterator_t *newit) {
1039  roaring_iterator_init(r, newit);
1040 }
1041 
1048  roaring_uint32_iterator_t *newit);
1049 
1051 CROARING_DEPRECATED static inline void roaring_init_iterator_last(
1052  const roaring_bitmap_t *r, roaring_uint32_iterator_t *newit) {
1053  roaring_iterator_init_last(r, newit);
1054 }
1055 
1065 
1067 CROARING_DEPRECATED static inline roaring_uint32_iterator_t *
1069  return roaring_iterator_create(r);
1070 }
1071 
1082 
1084 CROARING_DEPRECATED static inline bool roaring_advance_uint32_iterator(
1087 }
1088 
1099 
1101 CROARING_DEPRECATED static inline bool roaring_previous_uint32_iterator(
1104 }
1105 
1112  uint32_t val);
1113 
1115 CROARING_DEPRECATED static inline bool
1117  uint32_t val) {
1119 }
1120 
1126  const roaring_uint32_iterator_t *it);
1127 
1129 CROARING_DEPRECATED static inline roaring_uint32_iterator_t *
1131  return roaring_uint32_iterator_copy(it);
1132 }
1133 
1138 
1140 CROARING_DEPRECATED static inline void roaring_free_uint32_iterator(
1143 }
1144 
1145 /*
1146  * Reads next ${count} values from iterator into user-supplied ${buf}.
1147  * Returns the number of read elements.
1148  * This number can be smaller than ${count}, which means that iterator is
1149  * drained.
1150  *
1151  * This function satisfies semantics of iteration and can be used together with
1152  * other iterator functions.
1153  * - first value is copied from ${it}->current_value
1154  * - after function returns, iterator is positioned at the next element
1155  */
1157  uint32_t *buf, uint32_t count);
1158 
1160 CROARING_DEPRECATED static inline uint32_t roaring_read_uint32_iterator(
1161  roaring_uint32_iterator_t *it, uint32_t *buf, uint32_t count) {
1162  return roaring_uint32_iterator_read(it, buf, count);
1163 }
1164 
1165 #ifdef __cplusplus
1166 }
1167 }
1168 } // extern "C" { namespace roaring { namespace api {
1169 #endif
1170 
1171 #endif /* ROARING_H */
1172 
1173 #ifdef __cplusplus
1185 #if !defined(ROARING_API_NOT_IN_GLOBAL_NAMESPACE)
1186 using namespace ::roaring::api;
1187 #endif
1188 #endif
1189 
1190 // roaring64 will include roaring.h, but we would
1191 // prefer to avoid having our users include roaring64.h
1192 // in addition to roaring.h.
1193 #include <roaring/roaring64.h>
roaring_bitmap_t * roaring_bitmap_and(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
bool roaring_bitmap_select(const roaring_bitmap_t *r, uint32_t rank, uint32_t *element)
roaring_bitmap_t * roaring_bitmap_portable_deserialize_safe(const char *buf, size_t maxbytes)
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)
roaring_bitmap_t * roaring_bitmap_flip(const roaring_bitmap_t *r1, uint64_t range_start, uint64_t range_end)
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)
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)
roaring_bitmap_t * roaring_bitmap_create_with_capacity(uint32_t cap)
roaring_bitmap_t * roaring_bitmap_or_many(size_t number, const roaring_bitmap_t **rs)
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:1037
bool roaring_bitmap_run_optimize(roaring_bitmap_t *r)
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:1051
roaring_bitmap_t * roaring_bitmap_lazy_xor(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
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)
roaring_bitmap_t * roaring_bitmap_create(void)
Definition: roaring.h:43
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:84
void roaring_bitmap_to_uint32_array(const roaring_bitmap_t *r, uint32_t *ans)
bool roaring_bitmap_overwrite(roaring_bitmap_t *dest, const roaring_bitmap_t *src)
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)
roaring_bitmap_t * roaring_bitmap_or(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
double roaring_bitmap_jaccard_index(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
static CROARING_DEPRECATED roaring_uint32_iterator_t * roaring_create_iterator(const roaring_bitmap_t *r)
Definition: roaring.h:1068
size_t roaring_bitmap_size_in_bytes(const roaring_bitmap_t *r)
bool roaring_uint32_iterator_previous(roaring_uint32_iterator_t *it)
roaring_uint32_iterator_t * roaring_iterator_create(const roaring_bitmap_t *r)
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:59
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:410
roaring_bitmap_t * roaring_bitmap_xor_many(size_t number, const roaring_bitmap_t **rs)
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)
roaring_bitmap_t * roaring_bitmap_deserialize(const void *buf)
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:1101
roaring_bitmap_t * roaring_bitmap_portable_deserialize_frozen(const char *buf)
void roaring_bitmap_free(const roaring_bitmap_t *r)
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)
void roaring_bitmap_remove(roaring_bitmap_t *r, uint32_t x)
roaring_bitmap_t * roaring_bitmap_of_ptr(size_t n_args, const uint32_t *vals)
roaring_bitmap_t * roaring_bitmap_flip_closed(const roaring_bitmap_t *x1, uint32_t range_start, uint32_t range_end)
void roaring_bitmap_set_copy_on_write(roaring_bitmap_t *r, bool cow)
Definition: roaring.h:87
CROARING_DEPRECATED roaring_bitmap_t * roaring_bitmap_of(size_t n,...)
void roaring_bitmap_remove_range_closed(roaring_bitmap_t *r, uint32_t min, uint32_t max)
roaring_bitmap_t * roaring_bitmap_copy(const roaring_bitmap_t *r)
const roaring_bitmap_t * roaring_bitmap_frozen_view(const char *buf, size_t length)
bool roaring_bitmap_is_strict_subset(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
roaring_bitmap_t * roaring_bitmap_add_offset(const roaring_bitmap_t *bm, int64_t offset)
roaring_bitmap_t * roaring_bitmap_portable_deserialize(const char *buf)
struct roaring_bitmap_s roaring_bitmap_t
uint64_t roaring_bitmap_xor_cardinality(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
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_lazy_or(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2, const bool bitsetconversion)
size_t roaring_bitmap_portable_size_in_bytes(const roaring_bitmap_t *r)
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:1160
void roaring_bitmap_rank_many(const roaring_bitmap_t *r, const uint32_t *begin, const uint32_t *end, uint64_t *ans)
roaring_bitmap_t * roaring_bitmap_xor(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
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:1116
uint32_t roaring_bitmap_maximum(const roaring_bitmap_t *r)
roaring_bitmap_t * roaring_bitmap_or_many_heap(uint32_t number, const roaring_bitmap_t **rs)
bool roaring_bitmap_init_with_capacity(roaring_bitmap_t *r, uint32_t cap)
void roaring_bitmap_add_range(roaring_bitmap_t *r, uint64_t min, uint64_t max)
Definition: roaring.h:388
static CROARING_DEPRECATED roaring_uint32_iterator_t * roaring_copy_uint32_iterator(const roaring_uint32_iterator_t *it)
Definition: roaring.h:1130
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)
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_andnot(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
roaring_uint32_iterator_t * roaring_uint32_iterator_copy(const roaring_uint32_iterator_t *it)
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:1084
roaring_bitmap_t * roaring_bitmap_deserialize_safe(const void *buf, size_t maxbytes)
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:1140
uint32_t roaring_bitmap_minimum(const roaring_bitmap_t *r)
void roaring_bitmap_add(roaring_bitmap_t *r, uint32_t x)
roaring_bitmap_t * roaring_bitmap_from_range(uint64_t min, uint64_t max, uint32_t step)
roaring_array_t high_low_container
Definition: roaring.h:27
ROARING_CONTAINER_T * container
Definition: roaring.h:334
const roaring_bitmap_t * parent
Definition: roaring.h:1017
const ROARING_CONTAINER_T * container
Definition: roaring.h:1018
roaring_container_iterator_t container_it
Definition: roaring.h:1022