CRoaring  4.0.0
Roaring bitmaps in C (and C++)
roaring.hh
Go to the documentation of this file.
1 /*
2 A C++ header for Roaring Bitmaps.
3 */
4 #ifndef INCLUDE_ROARING_HH_
5 #define INCLUDE_ROARING_HH_
6 
7 #include <algorithm>
8 #include <cstdarg>
9 #include <initializer_list>
10 #include <new>
11 #include <stdexcept>
12 #include <string>
13 
14 #if !defined(ROARING_EXCEPTIONS)
15 // __cpp_exceptions is required by C++98 and we require C++11 or better.
16 #ifndef __cpp_exceptions
17 #error "__cpp_exceptions should be defined"
18 #endif
19 #if __cpp_exceptions
20 #define ROARING_EXCEPTIONS 1
21 #else
22 #define ROARING_EXCEPTIONS 0
23 #endif
24 #endif
25 
26 #ifndef ROARING_TERMINATE
27 #if ROARING_EXCEPTIONS
28 #define ROARING_TERMINATE(_s) throw std::runtime_error(_s)
29 #else
30 #define ROARING_TERMINATE(_s) std::terminate()
31 #endif
32 #endif
33 
34 #define ROARING_API_NOT_IN_GLOBAL_NAMESPACE // see remarks in roaring.h
35 #include <roaring/roaring.h>
36 #undef ROARING_API_NOT_IN_GLOBAL_NAMESPACE
37 
38 #include <roaring/roaring_array.h> // roaring::internal array functions used
39 
40 namespace roaring {
41 
43 
51 class BulkContext {
52  public:
53  friend class Roaring;
55  BulkContext() : context_{nullptr, 0, 0, 0} {}
56 
57  BulkContext(const BulkContext &) = delete;
58  BulkContext &operator=(const BulkContext &) = delete;
59  BulkContext(BulkContext &&) noexcept = default;
60  BulkContext &operator=(BulkContext &&) noexcept = default;
61 
62  private:
64 };
65 
66 class Roaring {
67  typedef api::roaring_bitmap_t roaring_bitmap_t; // class-local name alias
68 
69  public:
74  Roaring() : roaring{} {
75  // The empty constructor roaring{} silences warnings from pedantic
76  // static analyzers.
78  }
79 
83  Roaring(size_t n, const uint32_t *data) : Roaring() {
85  }
86 
90  Roaring(std::initializer_list<uint32_t> l) : Roaring() {
91  addMany(l.size(), l.begin());
92  }
93 
98  Roaring(const Roaring &r) : Roaring() {
100  ROARING_TERMINATE("failed roaring_bitmap_overwrite in constructor");
101  }
104  }
105 
110  Roaring(Roaring &&r) noexcept : roaring(r.roaring) {
111  //
112  // !!! This clones the bits of the roaring structure to a new location
113  // and then overwrites the old bits...assuming that this will still
114  // work. There are scenarios where this could break; e.g. if some of
115  // those bits were pointers into the structure memory itself. If such
116  // things were possible, a roaring_bitmap_move() API would be needed.
117  //
119  }
120 
127  explicit Roaring(roaring_bitmap_t *s) noexcept : roaring(*s) {
128  roaring_free(s); // deallocate the passed-in pointer
129  }
130 
134  static Roaring bitmapOf(size_t n, ...) {
135  Roaring ans;
136  va_list vl;
137  va_start(vl, n);
138  for (size_t i = 0; i < n; i++) {
139  ans.add(va_arg(vl, uint32_t));
140  }
141  va_end(vl);
142  return ans;
143  }
144 
149  static Roaring bitmapOfList(std::initializer_list<uint32_t> l) {
150  Roaring ans;
151  ans.addMany(l.size(), l.begin());
152  return ans;
153  }
154 
158  void add(uint32_t x) noexcept { api::roaring_bitmap_add(&roaring, x); }
159 
165  bool addChecked(uint32_t x) noexcept {
167  }
168 
172  void addRange(const uint64_t min, const uint64_t max) noexcept {
173  return api::roaring_bitmap_add_range(&roaring, min, max);
174  }
175 
179  void addRangeClosed(const uint32_t min, const uint32_t max) noexcept {
181  }
182 
186  void addMany(size_t n_args, const uint32_t *vals) noexcept {
187  api::roaring_bitmap_add_many(&roaring, n_args, vals);
188  }
189 
198  void addBulk(BulkContext &context, uint32_t x) noexcept {
199  api::roaring_bitmap_add_bulk(&roaring, &context.context_, x);
200  }
201 
210  bool containsBulk(BulkContext &context, uint32_t x) const noexcept {
211  return api::roaring_bitmap_contains_bulk(&roaring, &context.context_,
212  x);
213  }
214 
218  void remove(uint32_t x) noexcept {
220  }
221 
227  bool removeChecked(uint32_t x) noexcept {
229  }
230 
234  void removeRange(uint64_t min, uint64_t max) noexcept {
235  return api::roaring_bitmap_remove_range(&roaring, min, max);
236  }
237 
241  void removeRangeClosed(uint32_t min, uint32_t max) noexcept {
243  }
244 
248  uint32_t maximum() const noexcept {
250  }
251 
255  uint32_t minimum() const noexcept {
257  }
258 
262  bool contains(uint32_t x) const noexcept {
264  }
265 
269  bool containsRange(const uint64_t x, const uint64_t y) const noexcept {
271  }
272 
278  if (!(roaring.high_low_container.flags & ROARING_FLAG_FROZEN)) {
280  } else {
281  // The roaring member variable copies the `roaring_bitmap_t` and
282  // nested `roaring_array_t` structures by value and is freed in the
283  // constructor, however the underlying memory arena used for the
284  // container data is not freed with it. Here we derive the arena
285  // pointer from the second arena allocation in
286  // `roaring_bitmap_frozen_view` and free it as well.
288  (roaring_bitmap_t *)((char *)
289  roaring.high_low_container.containers -
290  sizeof(roaring_bitmap_t)));
291  }
292  }
293 
299  Roaring &operator=(const Roaring &r) {
301  ROARING_TERMINATE("failed memory alloc in assignment");
302  }
305  return *this;
306  }
307 
312  Roaring &operator=(Roaring &&r) noexcept {
313  api::roaring_bitmap_clear(&roaring); // free this class's allocations
314 
315  // !!! See notes in the Move Constructor regarding roaring_bitmap_move()
316  //
317  roaring = r.roaring;
319 
320  return *this;
321  }
322 
326  Roaring &operator=(std::initializer_list<uint32_t> l) {
327  // Delegate to move assignment operator
328  *this = Roaring(l);
329  return *this;
330  }
331 
340  Roaring &operator&=(const Roaring &r) noexcept {
342  return *this;
343  }
344 
350  Roaring &operator-=(const Roaring &r) noexcept {
352  return *this;
353  }
354 
362  Roaring &operator|=(const Roaring &r) noexcept {
364  return *this;
365  }
366 
372  Roaring &operator^=(const Roaring &r) noexcept {
374  return *this;
375  }
376 
380  void swap(Roaring &r) noexcept { std::swap(r.roaring, roaring); }
381 
385  uint64_t cardinality() const noexcept {
387  }
388 
392  bool isEmpty() const noexcept {
394  }
395 
399  bool isSubset(const Roaring &r) const noexcept {
400  return api::roaring_bitmap_is_subset(&roaring, &r.roaring);
401  }
402 
406  bool isStrictSubset(const Roaring &r) const noexcept {
407  return api::roaring_bitmap_is_strict_subset(&roaring, &r.roaring);
408  }
409 
415  void toUint32Array(uint32_t *ans) const noexcept {
417  }
421  void rangeUint32Array(uint32_t *ans, size_t offset,
422  size_t limit) const noexcept {
423  api::roaring_bitmap_range_uint32_array(&roaring, offset, limit, ans);
424  }
425 
429  bool operator==(const Roaring &r) const noexcept {
430  return api::roaring_bitmap_equals(&roaring, &r.roaring);
431  }
432 
437  void flip(uint64_t range_start, uint64_t range_end) noexcept {
438  api::roaring_bitmap_flip_inplace(&roaring, range_start, range_end);
439  }
440 
445  void flipClosed(uint32_t range_start, uint32_t range_end) noexcept {
447  uint64_t(range_end) + 1);
448  }
449 
454  bool removeRunCompression() noexcept {
456  }
457 
464  bool runOptimize() noexcept {
466  }
467 
472  size_t shrinkToFit() noexcept {
474  }
475 
485  void iterate(api::roaring_iterator iterator, void *ptr) const {
486  api::roaring_iterate(&roaring, iterator, ptr);
487  }
488 
497  bool select(uint32_t rnk, uint32_t *element) const noexcept {
498  return api::roaring_bitmap_select(&roaring, rnk, element);
499  }
500 
504  uint64_t and_cardinality(const Roaring &r) const noexcept {
505  return api::roaring_bitmap_and_cardinality(&roaring, &r.roaring);
506  }
507 
511  bool intersect(const Roaring &r) const noexcept {
512  return api::roaring_bitmap_intersect(&roaring, &r.roaring);
513  }
514 
522  double jaccard_index(const Roaring &r) const noexcept {
523  return api::roaring_bitmap_jaccard_index(&roaring, &r.roaring);
524  }
525 
529  uint64_t or_cardinality(const Roaring &r) const noexcept {
530  return api::roaring_bitmap_or_cardinality(&roaring, &r.roaring);
531  }
532 
536  uint64_t andnot_cardinality(const Roaring &r) const noexcept {
537  return api::roaring_bitmap_andnot_cardinality(&roaring, &r.roaring);
538  }
539 
544  uint64_t xor_cardinality(const Roaring &r) const noexcept {
545  return api::roaring_bitmap_xor_cardinality(&roaring, &r.roaring);
546  }
547 
556  uint64_t rank(uint32_t x) const noexcept {
557  return api::roaring_bitmap_rank(&roaring, x);
558  }
559 
565  void rank_many(const uint32_t *begin, const uint32_t *end,
566  uint64_t *ans) const noexcept {
567  return api::roaring_bitmap_rank_many(&roaring, begin, end, ans);
568  }
569 
577  int64_t getIndex(uint32_t x) const noexcept {
579  }
580 
620  size_t write(char *buf, bool portable = true) const noexcept {
621  if (portable) {
623  } else {
625  }
626  }
627 
644  static Roaring read(const char *buf, bool portable = true) {
645  roaring_bitmap_t *r =
648  if (r == NULL) {
649  ROARING_TERMINATE("failed alloc while reading");
650  }
651  return Roaring(r);
652  }
653 
677  static Roaring readSafe(const char *buf, size_t maxbytes) {
678  roaring_bitmap_t *r =
680  if (r == NULL) {
681  ROARING_TERMINATE("failed alloc while reading");
682  }
683  return Roaring(r);
684  }
685 
694  size_t getSizeInBytes(bool portable = true) const noexcept {
695  if (portable) {
697  } else {
699  }
700  }
701 
706  static const Roaring frozenView(const char *buf, size_t length) {
707  const roaring_bitmap_t *s =
708  api::roaring_bitmap_frozen_view(buf, length);
709  if (s == NULL) {
710  ROARING_TERMINATE("failed to read frozen bitmap");
711  }
712  Roaring r;
713  r.roaring = *s;
714  return r;
715  }
716 
721  static const Roaring portableDeserializeFrozen(const char *buf) {
722  const roaring_bitmap_t *s =
724  if (s == NULL) {
725  ROARING_TERMINATE("failed to read portable frozen bitmap");
726  }
727  Roaring r;
728  r.roaring = *s;
729  return r;
730  }
731 
735  void writeFrozen(char *buf) const noexcept {
737  }
738 
742  size_t getFrozenSizeInBytes() const noexcept {
744  }
745 
756  Roaring operator&(const Roaring &o) const {
757  roaring_bitmap_t *r = api::roaring_bitmap_and(&roaring, &o.roaring);
758  if (r == NULL) {
759  ROARING_TERMINATE("failed materalization in and");
760  }
761  return Roaring(r);
762  }
763 
769  Roaring operator-(const Roaring &o) const {
770  roaring_bitmap_t *r = api::roaring_bitmap_andnot(&roaring, &o.roaring);
771  if (r == NULL) {
772  ROARING_TERMINATE("failed materalization in andnot");
773  }
774  return Roaring(r);
775  }
776 
782  Roaring operator|(const Roaring &o) const {
783  roaring_bitmap_t *r = api::roaring_bitmap_or(&roaring, &o.roaring);
784  if (r == NULL) {
785  ROARING_TERMINATE("failed materalization in or");
786  }
787  return Roaring(r);
788  }
789 
795  Roaring operator^(const Roaring &o) const {
796  roaring_bitmap_t *r = api::roaring_bitmap_xor(&roaring, &o.roaring);
797  if (r == NULL) {
798  ROARING_TERMINATE("failed materalization in xor");
799  }
800  return Roaring(r);
801  }
802 
806  void setCopyOnWrite(bool val) noexcept {
808  }
809 
813  void printf() const noexcept { api::roaring_bitmap_printf(&roaring); }
814 
818  std::string toString() const noexcept {
819  struct iter_data {
820  std::string str{}; // The empty constructor silences warnings from
821  // pedantic static analyzers.
822  char first_char = '{';
823  } outer_iter_data;
824  if (!isEmpty()) {
825  iterate(
826  [](uint32_t value, void *inner_iter_data) -> bool {
827  ((iter_data *)inner_iter_data)->str +=
828  ((iter_data *)inner_iter_data)->first_char;
829  ((iter_data *)inner_iter_data)->str +=
830  std::to_string(value);
831  ((iter_data *)inner_iter_data)->first_char = ',';
832  return true;
833  },
834  (void *)&outer_iter_data);
835  } else
836  outer_iter_data.str = '{';
837  outer_iter_data.str += '}';
838  return outer_iter_data.str;
839  }
840 
844  bool getCopyOnWrite() const noexcept {
846  }
847 
853  static Roaring fastunion(size_t n, const Roaring **inputs) {
854  const roaring_bitmap_t **x = (const roaring_bitmap_t **)roaring_malloc(
855  n * sizeof(roaring_bitmap_t *));
856  if (x == NULL) {
857  ROARING_TERMINATE("failed memory alloc in fastunion");
858  }
859  for (size_t k = 0; k < n; ++k) x[k] = &inputs[k]->roaring;
860 
861  roaring_bitmap_t *c_ans = api::roaring_bitmap_or_many(n, x);
862  if (c_ans == NULL) {
863  roaring_free(x);
864  ROARING_TERMINATE("failed memory alloc in fastunion");
865  }
866  Roaring ans(c_ans);
867  roaring_free(x);
868  return ans;
869  }
870 
872 
882  const_iterator begin() const;
883 
888  const_iterator &end() const;
889 
890  roaring_bitmap_t roaring;
891 };
892 
897  public:
898  typedef std::forward_iterator_tag iterator_category;
899  typedef uint32_t *pointer;
900  typedef uint32_t &reference_type;
901  typedef uint32_t value_type;
902  typedef int32_t difference_type;
904 
908  value_type operator*() const { return i.current_value; }
909 
910  bool operator<(const type_of_iterator &o) const {
911  if (!i.has_value) return false;
912  if (!o.i.has_value) return true;
913  return i.current_value < *o;
914  }
915 
916  bool operator<=(const type_of_iterator &o) const {
917  if (!o.i.has_value) return true;
918  if (!i.has_value) return false;
919  return i.current_value <= *o;
920  }
921 
922  bool operator>(const type_of_iterator &o) const {
923  if (!o.i.has_value) return false;
924  if (!i.has_value) return true;
925  return i.current_value > *o;
926  }
927 
928  bool operator>=(const type_of_iterator &o) const {
929  if (!i.has_value) return true;
930  if (!o.i.has_value) return false;
931  return i.current_value >= *o;
932  }
933 
937  void equalorlarger(uint32_t val) {
939  }
940 
941  type_of_iterator &operator++() { // ++i, must returned inc. value
943  return *this;
944  }
945 
946  type_of_iterator operator++(int) { // i++, must return orig. value
947  RoaringSetBitForwardIterator orig(*this);
949  return orig;
950  }
951 
952  type_of_iterator &operator--() { // prefix --
954  return *this;
955  }
956 
957  type_of_iterator operator--(int) { // postfix --
958  RoaringSetBitForwardIterator orig(*this);
960  return orig;
961  }
962 
964  return i.current_value == *o && i.has_value == o.i.has_value;
965  }
966 
968  return i.current_value != *o || i.has_value != o.i.has_value;
969  }
970 
971  explicit RoaringSetBitForwardIterator(const Roaring &parent,
972  bool exhausted = false) {
973  if (exhausted) {
974  i.parent = &parent.roaring;
975  i.container_index = INT32_MAX;
976  i.has_value = false;
977  i.current_value = UINT32_MAX;
978  } else {
979  api::roaring_iterator_init(&parent.roaring, &i);
980  }
981  }
982 
984  i{}; // The empty constructor silences warnings from pedantic static
985  // analyzers.
986 };
987 
989  return RoaringSetBitForwardIterator(*this);
990 }
991 
993  static RoaringSetBitForwardIterator e(*this, true);
994  return e;
995 }
996 
997 } // namespace roaring
998 
999 #endif /* INCLUDE_ROARING_HH_ */
BulkContext(const BulkContext &)=delete
friend class Roaring
Definition: roaring.hh:53
BulkContext(BulkContext &&) noexcept=default
api::roaring_bulk_context_t roaring_bitmap_bulk_context_t
Definition: roaring.hh:54
BulkContext & operator=(const BulkContext &)=delete
bool operator<(const type_of_iterator &o) const
Definition: roaring.hh:910
bool operator>(const type_of_iterator &o) const
Definition: roaring.hh:922
RoaringSetBitForwardIterator(const Roaring &parent, bool exhausted=false)
Definition: roaring.hh:971
bool operator<=(const type_of_iterator &o) const
Definition: roaring.hh:916
bool operator>=(const type_of_iterator &o) const
Definition: roaring.hh:928
type_of_iterator operator--(int)
Definition: roaring.hh:957
api::roaring_uint32_iterator_t i
Definition: roaring.hh:984
void equalorlarger(uint32_t val)
Definition: roaring.hh:937
std::forward_iterator_tag iterator_category
Definition: roaring.hh:898
bool operator==(const RoaringSetBitForwardIterator &o) const
Definition: roaring.hh:963
RoaringSetBitForwardIterator type_of_iterator
Definition: roaring.hh:903
type_of_iterator operator++(int)
Definition: roaring.hh:946
bool operator!=(const RoaringSetBitForwardIterator &o) const
Definition: roaring.hh:967
type_of_iterator & operator++()
Definition: roaring.hh:941
type_of_iterator & operator--()
Definition: roaring.hh:952
Roaring operator-(const Roaring &o) const
Definition: roaring.hh:769
Roaring(roaring_bitmap_t *s) noexcept
Definition: roaring.hh:127
static Roaring fastunion(size_t n, const Roaring **inputs)
Definition: roaring.hh:853
size_t getFrozenSizeInBytes() const noexcept
Definition: roaring.hh:742
size_t shrinkToFit() noexcept
Definition: roaring.hh:472
uint64_t xor_cardinality(const Roaring &r) const noexcept
Definition: roaring.hh:544
static Roaring readSafe(const char *buf, size_t maxbytes)
Definition: roaring.hh:677
const_iterator begin() const
Definition: roaring.hh:988
bool addChecked(uint32_t x) noexcept
Definition: roaring.hh:165
uint64_t rank(uint32_t x) const noexcept
Definition: roaring.hh:556
Roaring & operator=(std::initializer_list< uint32_t > l)
Definition: roaring.hh:326
void addRange(const uint64_t min, const uint64_t max) noexcept
Definition: roaring.hh:172
size_t write(char *buf, bool portable=true) const noexcept
Definition: roaring.hh:620
void addRangeClosed(const uint32_t min, const uint32_t max) noexcept
Definition: roaring.hh:179
uint64_t or_cardinality(const Roaring &r) const noexcept
Definition: roaring.hh:529
Roaring(Roaring &&r) noexcept
Definition: roaring.hh:110
static Roaring bitmapOfList(std::initializer_list< uint32_t > l)
Definition: roaring.hh:149
static Roaring read(const char *buf, bool portable=true)
Definition: roaring.hh:644
bool runOptimize() noexcept
Definition: roaring.hh:464
Roaring operator|(const Roaring &o) const
Definition: roaring.hh:782
uint64_t cardinality() const noexcept
Definition: roaring.hh:385
bool containsRange(const uint64_t x, const uint64_t y) const noexcept
Definition: roaring.hh:269
bool removeRunCompression() noexcept
Definition: roaring.hh:454
void add(uint32_t x) noexcept
Definition: roaring.hh:158
static Roaring bitmapOf(size_t n,...)
Definition: roaring.hh:134
void addBulk(BulkContext &context, uint32_t x) noexcept
Definition: roaring.hh:198
void addMany(size_t n_args, const uint32_t *vals) noexcept
Definition: roaring.hh:186
bool intersect(const Roaring &r) const noexcept
Definition: roaring.hh:511
std::string toString() const noexcept
Definition: roaring.hh:818
static const Roaring frozenView(const char *buf, size_t length)
Definition: roaring.hh:706
Roaring(size_t n, const uint32_t *data)
Definition: roaring.hh:83
bool containsBulk(BulkContext &context, uint32_t x) const noexcept
Definition: roaring.hh:210
const_iterator & end() const
Definition: roaring.hh:992
Roaring & operator^=(const Roaring &r) noexcept
Definition: roaring.hh:372
bool operator==(const Roaring &r) const noexcept
Definition: roaring.hh:429
void flipClosed(uint32_t range_start, uint32_t range_end) noexcept
Definition: roaring.hh:445
void writeFrozen(char *buf) const noexcept
Definition: roaring.hh:735
bool removeChecked(uint32_t x) noexcept
Definition: roaring.hh:227
Roaring & operator=(const Roaring &r)
Definition: roaring.hh:299
Roaring operator&(const Roaring &o) const
Definition: roaring.hh:756
uint64_t andnot_cardinality(const Roaring &r) const noexcept
Definition: roaring.hh:536
bool contains(uint32_t x) const noexcept
Definition: roaring.hh:262
static const Roaring portableDeserializeFrozen(const char *buf)
Definition: roaring.hh:721
bool getCopyOnWrite() const noexcept
Definition: roaring.hh:844
void rangeUint32Array(uint32_t *ans, size_t offset, size_t limit) const noexcept
Definition: roaring.hh:421
Roaring & operator&=(const Roaring &r) noexcept
Definition: roaring.hh:340
uint64_t and_cardinality(const Roaring &r) const noexcept
Definition: roaring.hh:504
size_t getSizeInBytes(bool portable=true) const noexcept
Definition: roaring.hh:694
void flip(uint64_t range_start, uint64_t range_end) noexcept
Definition: roaring.hh:437
void iterate(api::roaring_iterator iterator, void *ptr) const
Definition: roaring.hh:485
Roaring & operator=(Roaring &&r) noexcept
Definition: roaring.hh:312
void rank_many(const uint32_t *begin, const uint32_t *end, uint64_t *ans) const noexcept
Definition: roaring.hh:565
Roaring(std::initializer_list< uint32_t > l)
Definition: roaring.hh:90
roaring_bitmap_t roaring
Definition: roaring.hh:890
void toUint32Array(uint32_t *ans) const noexcept
Definition: roaring.hh:415
void remove(uint32_t x) noexcept
Definition: roaring.hh:218
bool isEmpty() const noexcept
Definition: roaring.hh:392
void removeRange(uint64_t min, uint64_t max) noexcept
Definition: roaring.hh:234
Roaring & operator|=(const Roaring &r) noexcept
Definition: roaring.hh:362
Roaring operator^(const Roaring &o) const
Definition: roaring.hh:795
void setCopyOnWrite(bool val) noexcept
Definition: roaring.hh:806
Roaring & operator-=(const Roaring &r) noexcept
Definition: roaring.hh:350
void printf() const noexcept
Definition: roaring.hh:813
uint32_t minimum() const noexcept
Definition: roaring.hh:255
double jaccard_index(const Roaring &r) const noexcept
Definition: roaring.hh:522
bool isSubset(const Roaring &r) const noexcept
Definition: roaring.hh:399
bool select(uint32_t rnk, uint32_t *element) const noexcept
Definition: roaring.hh:497
int64_t getIndex(uint32_t x) const noexcept
Definition: roaring.hh:577
void swap(Roaring &r) noexcept
Definition: roaring.hh:380
Roaring(const Roaring &r)
Definition: roaring.hh:98
uint32_t maximum() const noexcept
Definition: roaring.hh:248
bool isStrictSubset(const Roaring &r) const noexcept
Definition: roaring.hh:406
RoaringSetBitForwardIterator const_iterator
Definition: roaring.hh:871
void removeRangeClosed(uint32_t min, uint32_t max) noexcept
Definition: roaring.hh:241
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)
void roaring_bitmap_add_range_closed(roaring_bitmap_t *r, uint32_t min, uint32_t max)
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)
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_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)
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)
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)
size_t roaring_bitmap_size_in_bytes(const roaring_bitmap_t *r)
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: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:408
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)
roaring_bitmap_t * roaring_bitmap_deserialize(const void *buf)
bool roaring_bitmap_is_empty(const roaring_bitmap_t *r)
roaring_bitmap_t * roaring_bitmap_portable_deserialize_frozen(const char *buf)
void roaring_bitmap_free(const roaring_bitmap_t *r)
bool roaring_bitmap_contains(const roaring_bitmap_t *r, uint32_t val)
void roaring_bitmap_remove(roaring_bitmap_t *r, uint32_t x)
void roaring_bitmap_set_copy_on_write(roaring_bitmap_t *r, bool cow)
Definition: roaring.h:87
void roaring_bitmap_remove_range_closed(roaring_bitmap_t *r, uint32_t min, uint32_t max)
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_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)
uint64_t roaring_bitmap_andnot_cardinality(const roaring_bitmap_t *r1, const roaring_bitmap_t *r2)
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)
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)
uint64_t roaring_bitmap_rank(const roaring_bitmap_t *r, uint32_t x)
uint32_t roaring_bitmap_maximum(const roaring_bitmap_t *r)
void roaring_bitmap_add_range(roaring_bitmap_t *r, uint64_t min, uint64_t max)
Definition: roaring.h:388
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)
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)
struct roaring_bulk_context_s roaring_bulk_context_t
struct roaring_uint32_iterator_s roaring_uint32_iterator_t
bool roaring_bitmap_remove_checked(roaring_bitmap_t *r, uint32_t x)
void roaring_bitmap_printf(const roaring_bitmap_t *r)
bool roaring_uint32_iterator_advance(roaring_uint32_iterator_t *it)
uint32_t roaring_bitmap_minimum(const roaring_bitmap_t *r)
void roaring_bitmap_add(roaring_bitmap_t *r, uint32_t x)
#define ROARING_TERMINATE(_s)
Definition: roaring.hh:30