CRoaring 5.2.2
Roaring bitmaps in C (and C++)
Loading...
Searching...
No Matches
roaring64.h
Go to the documentation of this file.
1/*
2 * roaring64.h
3 *
4 * This file declares the 64-bit Roaring bitmap API. A roaring64 bitmap stores
5 * sets of 64-bit unsigned integers by partitioning the value space by high
6 * bits and using Roaring containers for the lower bits inside each partition.
7 * This keeps the structure compact while preserving fast membership tests,
8 * insertions, iteration, and set operations over large sparse integer sets.
9 */
10#ifndef ROARING64_H
11#define ROARING64_H
12
13#include <stdbool.h>
14#include <stddef.h>
15#include <stdint.h>
16
17#include <roaring/memory.h>
18#include <roaring/portability.h>
19#include <roaring/roaring.h>
20#include <roaring/roaring_types.h>
21
22#ifdef __cplusplus
23extern "C" {
24namespace roaring {
25namespace api {
26#endif
27
30typedef struct roaring64_bitmap_s roaring64_bitmap_t;
33typedef uint64_t roaring64_leaf_t;
36typedef struct roaring64_iterator_s roaring64_iterator_t;
37
46
62
70
76
87 const roaring64_bitmap_t *src);
88
93 const uint64_t *vals);
94
95#ifdef __cplusplus
102// Use an immediately invoked closure, capturing by reference
103// (in case __VA_ARGS__ refers to context outside the closure)
104// Include a 0 at the beginning of the array to make the array length > 0
105// (zero sized arrays are not valid in standard c/c++)
106#define roaring64_bitmap_from(...) \
107 [&]() { \
108 const uint64_t roaring64_bitmap_from_array[] = {0, __VA_ARGS__}; \
109 return roaring64_bitmap_of_ptr( \
110 (sizeof(roaring64_bitmap_from_array) / \
111 sizeof(roaring64_bitmap_from_array[0])) - \
112 1, \
113 &roaring64_bitmap_from_array[1]); \
114 }()
115#else
122// While __VA_ARGS__ occurs twice in expansion, one of the times is in a sizeof
123// expression, which is an unevaluated context, so it's even safe in the case
124// where expressions passed have side effects (roaring64_bitmap_from(my_func(),
125// ++i))
126// Include a 0 at the beginning of the array to make the array length > 0
127// (zero sized arrays are not valid in standard c/c++)
128#define roaring64_bitmap_from(...) \
129 roaring64_bitmap_of_ptr( \
130 (sizeof((const uint64_t[]){0, __VA_ARGS__}) / sizeof(uint64_t)) - 1, \
131 &((const uint64_t[]){0, __VA_ARGS__})[1])
132#endif
133
141
148 uint64_t step);
149
154
160
176 roaring64_bulk_context_t *context, uint64_t val);
177
187 const uint64_t *vals);
188
193 uint64_t max);
194
199 uint64_t max);
200
205
211
228 uint64_t val);
229
239 const uint64_t *vals);
240
245 uint64_t max);
246
251 uint64_t max);
252
257
262
267 uint64_t max);
268
273 uint64_t min, uint64_t max);
274
292 uint64_t val);
293
300bool roaring64_bitmap_select(const roaring64_bitmap_t *r, uint64_t rank,
301 uint64_t *element);
302
313uint64_t roaring64_bitmap_rank(const roaring64_bitmap_t *r, uint64_t val);
314
321 uint64_t *out_index);
322
327
332 uint64_t min, uint64_t max);
333
338 uint64_t min, uint64_t max);
339
344
349
354
360
365
371
377 roaring64_statistics_t *stat);
378
391 const char **reason);
392
397 const roaring64_bitmap_t *r2);
398
403 const roaring64_bitmap_t *r2);
404
410 const roaring64_bitmap_t *r2);
411
424 const roaring64_bitmap_t *r2);
425
430 const roaring64_bitmap_t *r2);
431
440 const roaring64_bitmap_t *r2);
441
446 const roaring64_bitmap_t *r2);
447
452 uint64_t min, uint64_t max);
453
461 const roaring64_bitmap_t *r2);
462
469 const roaring64_bitmap_t *r2);
470
475 const roaring64_bitmap_t *r2);
476
481 const roaring64_bitmap_t *r2);
482
489 const roaring64_bitmap_t *r2);
490
495 const roaring64_bitmap_t *r2);
496
502 const roaring64_bitmap_t *r2);
503
510 const roaring64_bitmap_t *r2);
511
516 const roaring64_bitmap_t *r2);
517
523 const roaring64_bitmap_t *r2);
524
532 uint64_t min, uint64_t max);
533
541 uint64_t min, uint64_t max);
542
549 uint64_t max);
556 uint64_t max);
565 const roaring64_bitmap_t *r, bool positive, uint64_t offset);
566
574 const roaring64_bitmap_t *r, uint64_t offset) {
575 return roaring64_bitmap_add_offset_signed(r, true, offset);
576}
577
585 const roaring64_bitmap_t *r, uint64_t offset) {
586 return roaring64_bitmap_add_offset_signed(r, false, offset);
587}
588
596
612 char *buf);
621 size_t maxbytes);
622
653 size_t maxbytes);
654
693 const char *buf, size_t maxbytes);
694
702
723 char *buf);
724
742 size_t maxbytes);
743
758 roaring_iterator64 iterator, void *ptr);
759
769 uint64_t *out);
770
780
790 const roaring64_bitmap_t *r);
791
798
805
811
816
826 return ((const roaring64_iterator_public_t *)it)->has_value;
827}
828
834 return ((const roaring64_iterator_public_t *)it)->value;
835}
836
847
858
867 uint64_t val);
868
877 uint64_t count);
878
894 uint64_t *buf, uint64_t count);
895
900
921 size_t count);
922
946 size_t count);
947
948#ifdef __cplusplus
949} // extern "C"
950} // namespace roaring
951} // namespace api
952#endif
953
954#endif /* ROARING64_H */
size_t roaring64_bitmap_frozen_size_in_bytes(const roaring64_bitmap_t *r)
void roaring64_bitmap_overwrite(roaring64_bitmap_t *dest, const roaring64_bitmap_t *src)
uint64_t roaring64_bitmap_or_cardinality(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
roaring64_bitmap_t * roaring64_bitmap_xor(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
void roaring64_bitmap_add_many(roaring64_bitmap_t *r, size_t n_args, const uint64_t *vals)
roaring64_bitmap_t * roaring64_bitmap_move_from_roaring32(roaring_bitmap_t *r)
bool roaring64_bitmap_intersect(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
roaring64_bitmap_t * roaring64_bitmap_of_ptr(size_t n_args, const uint64_t *vals)
void roaring64_bitmap_remove(roaring64_bitmap_t *r, uint64_t val)
roaring64_bitmap_t * roaring64_bitmap_portable_deserialize_safe(const char *buf, size_t maxbytes)
void roaring64_bitmap_xor_inplace(roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
roaring64_bitmap_t * roaring64_bitmap_flip_closed(const roaring64_bitmap_t *r, uint64_t min, uint64_t max)
void roaring64_bitmap_remove_many(roaring64_bitmap_t *r, size_t n_args, const uint64_t *vals)
roaring64_bitmap_t * roaring64_bitmap_add_offset_signed(const roaring64_bitmap_t *r, bool positive, uint64_t offset)
roaring64_iterator_t * roaring64_iterator_copy(const roaring64_iterator_t *it)
uint64_t roaring64_iterator_value(const roaring64_iterator_t *it)
Definition roaring64.h:833
void roaring64_bitmap_add_range_closed(roaring64_bitmap_t *r, uint64_t min, uint64_t max)
uint64_t roaring64_bitmap_andnot_cardinality(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
void roaring64_iterator_reinit_last(const roaring64_bitmap_t *r, roaring64_iterator_t *it)
void roaring64_bitmap_flip_closed_inplace(roaring64_bitmap_t *r, uint64_t min, uint64_t max)
bool roaring64_bitmap_equals(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
bool roaring64_bitmap_get_index(const roaring64_bitmap_t *r, uint64_t val, uint64_t *out_index)
size_t roaring64_bitmap_portable_size_in_bytes(const roaring64_bitmap_t *r)
bool roaring64_bitmap_run_optimize(roaring64_bitmap_t *r)
bool roaring64_bitmap_add_checked(roaring64_bitmap_t *r, uint64_t val)
void roaring64_bitmap_add(roaring64_bitmap_t *r, uint64_t val)
bool roaring64_bitmap_intersect_with_range(const roaring64_bitmap_t *r, uint64_t min, uint64_t max)
roaring64_bitmap_t * roaring64_bitmap_andnot(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
uint64_t roaring64_bitmap_range_cardinality(const roaring64_bitmap_t *r, uint64_t min, uint64_t max)
bool roaring64_iterator_advance(roaring64_iterator_t *it)
roaring64_bitmap_t * roaring64_bitmap_or(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
roaring64_bitmap_t * roaring64_bitmap_copy(const roaring64_bitmap_t *r)
bool roaring64_bitmap_iterate(const roaring64_bitmap_t *r, roaring_iterator64 iterator, void *ptr)
roaring64_bitmap_t * roaring64_bitmap_frozen_view(const char *buf, size_t maxbytes)
bool roaring64_bitmap_contains_bulk(const roaring64_bitmap_t *r, roaring64_bulk_context_t *context, uint64_t val)
struct roaring64_iterator_s roaring64_iterator_t
Definition roaring64.h:36
void roaring64_bitmap_flip_inplace(roaring64_bitmap_t *r, uint64_t min, uint64_t max)
uint64_t roaring64_iterator_read_backward(roaring64_iterator_t *it, uint64_t *buf, uint64_t count)
struct roaring64_range_closed_s roaring64_range_closed_t
roaring64_bitmap_t * roaring64_bitmap_and(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
void roaring64_bitmap_statistics(const roaring64_bitmap_t *r, roaring64_statistics_t *stat)
void roaring64_bitmap_andnot_inplace(roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
bool roaring64_bitmap_internal_validate(const roaring64_bitmap_t *r, const char **reason)
void roaring64_bitmap_remove_range_closed(roaring64_bitmap_t *r, uint64_t min, uint64_t max)
uint64_t roaring64_bitmap_range_closed_cardinality(const roaring64_bitmap_t *r, uint64_t min, uint64_t max)
uint64_t roaring64_bitmap_and_cardinality(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
static roaring64_bitmap_t * roaring64_bitmap_add_offset(const roaring64_bitmap_t *r, uint64_t offset)
Definition roaring64.h:573
struct roaring64_iterator_public_s roaring64_iterator_public_t
struct roaring64_bitmap_s roaring64_bitmap_t
Definition roaring64.h:30
void roaring64_bitmap_remove_range(roaring64_bitmap_t *r, uint64_t min, uint64_t max)
void roaring64_bitmap_add_bulk(roaring64_bitmap_t *r, roaring64_bulk_context_t *context, uint64_t val)
size_t roaring64_iterator_read_prev_ranges(roaring64_iterator_t *it, roaring64_range_closed_t *buf, size_t count)
bool roaring64_bitmap_is_strict_subset(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
void roaring64_bitmap_remove_bulk(roaring64_bitmap_t *r, roaring64_bulk_context_t *context, uint64_t val)
roaring64_iterator_t * roaring64_iterator_create_last(const roaring64_bitmap_t *r)
bool roaring64_bitmap_contains_range_closed(const roaring64_bitmap_t *r, uint64_t min, uint64_t max)
size_t roaring64_bitmap_portable_serialize(const roaring64_bitmap_t *r, char *buf)
bool roaring64_bitmap_contains(const roaring64_bitmap_t *r, uint64_t val)
void roaring64_bitmap_add_range(roaring64_bitmap_t *r, uint64_t min, uint64_t max)
size_t roaring64_bitmap_portable_deserialize_size(const char *buf, size_t maxbytes)
size_t roaring64_bitmap_frozen_serialize(const roaring64_bitmap_t *r, char *buf)
bool roaring64_iterator_move_equalorlarger(roaring64_iterator_t *it, uint64_t val)
bool roaring64_iterator_has_value(const roaring64_iterator_t *it)
Definition roaring64.h:825
bool roaring64_iterator_previous(roaring64_iterator_t *it)
uint64_t roaring64_bitmap_rank(const roaring64_bitmap_t *r, uint64_t val)
void roaring64_bitmap_to_uint64_array(const roaring64_bitmap_t *r, uint64_t *out)
size_t roaring64_iterator_read_ranges(roaring64_iterator_t *it, roaring64_range_closed_t *buf, size_t count)
uint64_t roaring64_bitmap_maximum(const roaring64_bitmap_t *r)
void roaring64_iterator_reinit(const roaring64_bitmap_t *r, roaring64_iterator_t *it)
bool roaring64_bitmap_remove_run_compression(roaring64_bitmap_t *r)
size_t roaring64_bitmap_shrink_to_fit(roaring64_bitmap_t *r)
void roaring64_iterator_free(roaring64_iterator_t *it)
void roaring64_bitmap_and_inplace(roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
roaring64_bitmap_t * roaring64_bitmap_create(void)
bool roaring64_bitmap_contains_range(const roaring64_bitmap_t *r, uint64_t min, uint64_t max)
uint64_t roaring64_iterator_read(roaring64_iterator_t *it, uint64_t *buf, uint64_t count)
bool roaring64_bitmap_select(const roaring64_bitmap_t *r, uint64_t rank, uint64_t *element)
bool roaring64_bitmap_is_subset(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
roaring64_bitmap_t * roaring64_bitmap_from_range(uint64_t min, uint64_t max, uint64_t step)
uint64_t roaring64_bitmap_xor_cardinality(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
roaring64_bitmap_t * roaring64_bitmap_flip(const roaring64_bitmap_t *r, uint64_t min, uint64_t max)
static roaring64_bitmap_t * roaring64_bitmap_sub_offset(const roaring64_bitmap_t *r, uint64_t offset)
Definition roaring64.h:584
uint64_t roaring64_leaf_t
Definition roaring64.h:33
uint64_t roaring64_bitmap_minimum(const roaring64_bitmap_t *r)
void roaring64_bitmap_free(roaring64_bitmap_t *r)
double roaring64_bitmap_jaccard_index(const roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
uint64_t roaring64_bitmap_get_cardinality(const roaring64_bitmap_t *r)
struct roaring64_bulk_context_s roaring64_bulk_context_t
void roaring64_bitmap_or_inplace(roaring64_bitmap_t *r1, const roaring64_bitmap_t *r2)
bool roaring64_bitmap_is_empty(const roaring64_bitmap_t *r)
bool roaring64_bitmap_remove_checked(roaring64_bitmap_t *r, uint64_t val)
void roaring64_bitmap_clear(roaring64_bitmap_t *r)
roaring64_bitmap_t * roaring64_bitmap_portable_deserialize_frozen(const char *buf, size_t maxbytes)
roaring64_iterator_t * roaring64_iterator_create(const roaring64_bitmap_t *r)
roaring64_leaf_t * leaf
Definition roaring64.h:60