CRoaring 4.7.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
53
61
67
78 const roaring64_bitmap_t *src);
79
84 const uint64_t *vals);
85
86#ifdef __cplusplus
93// Use an immediately invoked closure, capturing by reference
94// (in case __VA_ARGS__ refers to context outside the closure)
95// Include a 0 at the beginning of the array to make the array length > 0
96// (zero sized arrays are not valid in standard c/c++)
97#define roaring64_bitmap_from(...) \
98 [&]() { \
99 const uint64_t roaring64_bitmap_from_array[] = {0, __VA_ARGS__}; \
100 return roaring64_bitmap_of_ptr( \
101 (sizeof(roaring64_bitmap_from_array) / \
102 sizeof(roaring64_bitmap_from_array[0])) - \
103 1, \
104 &roaring64_bitmap_from_array[1]); \
105 }()
106#else
113// While __VA_ARGS__ occurs twice in expansion, one of the times is in a sizeof
114// expression, which is an unevaluated context, so it's even safe in the case
115// where expressions passed have side effects (roaring64_bitmap_from(my_func(),
116// ++i))
117// Include a 0 at the beginning of the array to make the array length > 0
118// (zero sized arrays are not valid in standard c/c++)
119#define roaring64_bitmap_from(...) \
120 roaring64_bitmap_of_ptr( \
121 (sizeof((const uint64_t[]){0, __VA_ARGS__}) / sizeof(uint64_t)) - 1, \
122 &((const uint64_t[]){0, __VA_ARGS__})[1])
123#endif
124
132
139 uint64_t step);
140
145
151
167 roaring64_bulk_context_t *context, uint64_t val);
168
178 const uint64_t *vals);
179
184 uint64_t max);
185
190 uint64_t max);
191
196
202
219 uint64_t val);
220
230 const uint64_t *vals);
231
236 uint64_t max);
237
242 uint64_t max);
243
248
253
258 uint64_t max);
259
264 uint64_t min, uint64_t max);
265
283 uint64_t val);
284
291bool roaring64_bitmap_select(const roaring64_bitmap_t *r, uint64_t rank,
292 uint64_t *element);
293
304uint64_t roaring64_bitmap_rank(const roaring64_bitmap_t *r, uint64_t val);
305
312 uint64_t *out_index);
313
318
323 uint64_t min, uint64_t max);
324
329 uint64_t min, uint64_t max);
330
335
340
345
351
356
362
368 roaring64_statistics_t *stat);
369
382 const char **reason);
383
388 const roaring64_bitmap_t *r2);
389
394 const roaring64_bitmap_t *r2);
395
401 const roaring64_bitmap_t *r2);
402
415 const roaring64_bitmap_t *r2);
416
421 const roaring64_bitmap_t *r2);
422
431 const roaring64_bitmap_t *r2);
432
437 const roaring64_bitmap_t *r2);
438
443 uint64_t min, uint64_t max);
444
452 const roaring64_bitmap_t *r2);
453
460 const roaring64_bitmap_t *r2);
461
466 const roaring64_bitmap_t *r2);
467
472 const roaring64_bitmap_t *r2);
473
480 const roaring64_bitmap_t *r2);
481
486 const roaring64_bitmap_t *r2);
487
493 const roaring64_bitmap_t *r2);
494
501 const roaring64_bitmap_t *r2);
502
507 const roaring64_bitmap_t *r2);
508
514 const roaring64_bitmap_t *r2);
515
523 uint64_t min, uint64_t max);
524
532 uint64_t min, uint64_t max);
533
540 uint64_t max);
547 uint64_t max);
556 const roaring64_bitmap_t *r, bool positive, uint64_t offset);
557
565 const roaring64_bitmap_t *r, uint64_t offset) {
566 return roaring64_bitmap_add_offset_signed(r, true, offset);
567}
568
576 const roaring64_bitmap_t *r, uint64_t offset) {
577 return roaring64_bitmap_add_offset_signed(r, false, offset);
578}
579
587
603 char *buf);
612 size_t maxbytes);
613
644 size_t maxbytes);
645
653
674 char *buf);
675
693 size_t maxbytes);
694
709 roaring_iterator64 iterator, void *ptr);
710
720 uint64_t *out);
721
731
741 const roaring64_bitmap_t *r);
742
749
756
762
767
773
779
790
801
810 uint64_t val);
811
820 uint64_t count);
821
837 uint64_t *buf, uint64_t count);
838
843
864 size_t count);
865
889 size_t count);
890
891#ifdef __cplusplus
892} // extern "C"
893} // namespace roaring
894} // namespace api
895#endif
896
897#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)
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:564
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)
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:575
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_iterator_t * roaring64_iterator_create(const roaring64_bitmap_t *r)
roaring64_leaf_t * leaf
Definition roaring64.h:51