roaring 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54a748fcae71c5cf513774177c51f101a9eebf4e256cb7c255830e3ce9e0120d
4
- data.tar.gz: f34710a57c8a91757f0560cc673b256c4b103ef73640cb8fc9ee916b2afbaea1
3
+ metadata.gz: e08dfb8d63633ed830e1d06d55ca7fd7b765d980c95bc7615f9fa72687cfe473
4
+ data.tar.gz: 89ad77599782c197c0bce64b8c8f3de67faca0663de40254d29de4499701293f
5
5
  SHA512:
6
- metadata.gz: 28477225f8b0415f7309a0e1a0490236313c89273cd57b459389b6e7d71481c54c4701d0b877685c948eb8e9e900b4b3156559b70f5aa99894e86dee9546dc44
7
- data.tar.gz: 9aa1826a4bf7ee418c2a0c84a14c3031df75e6ea26cbca9e779d3fc64af944f735453c65dd8aed322d95b2032b018eb1007f97e8a85c3aafef08b565bab811aa
6
+ metadata.gz: 5304e68fb92cf65f91a14f2febd49746a6f84a858816d2c5dfb4c45ed025e079d62d509532c24f58b53314c26b370f25090c08d18a30e0030f317c76679d0a79
7
+ data.tar.gz: d132d47dbcb586a0db6e8204e42bd71f2512de670e004b05c5b9068f2f096e0551c9c43cb7283b9536c28c49754a95bfe2a79ba7514a7bff1611e47d426c5e23
data/Gemfile CHANGED
@@ -8,5 +8,6 @@ gemspec
8
8
  gem "rake", "~> 13.0"
9
9
 
10
10
  gem "rake-compiler"
11
+ gem "debug"
11
12
 
12
13
  gem "minitest", "~> 5.0"
data/Gemfile.lock CHANGED
@@ -6,20 +6,29 @@ PATH
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ debug (1.6.2)
10
+ irb (>= 1.3.6)
11
+ reline (>= 0.3.1)
9
12
  forwardable (1.3.2)
10
- minitest (5.15.0)
13
+ io-console (0.5.11)
14
+ irb (1.4.1)
15
+ reline (>= 0.3.0)
16
+ minitest (5.16.3)
11
17
  prime (0.1.2)
12
18
  forwardable
13
19
  singleton
14
20
  rake (13.0.6)
15
21
  rake-compiler (1.2.0)
16
22
  rake
23
+ reline (0.3.1)
24
+ io-console (~> 0.5)
17
25
  singleton (0.1.1)
18
26
 
19
27
  PLATFORMS
20
28
  x86_64-linux
21
29
 
22
30
  DEPENDENCIES
31
+ debug
23
32
  minitest (~> 5.0)
24
33
  prime
25
34
  rake (~> 13.0)
data/ext/roaring/cext.c CHANGED
@@ -6,6 +6,10 @@
6
6
  static VALUE cRoaringBitmap;
7
7
  VALUE rb_mRoaring;
8
8
 
9
+ #ifndef RBOOL
10
+ #define RBOOL(x) ((x) ? Qtrue : Qfalse)
11
+ #endif
12
+
9
13
  static inline uint32_t
10
14
  NUM2UINT32(VALUE num) {
11
15
  if (!FIXNUM_P(num) && !RB_TYPE_P(num, T_BIGNUM)) {
@@ -44,12 +48,15 @@ static VALUE rb_roaring_alloc(VALUE self)
44
48
  return TypedData_Wrap_Struct(self, &roaring_type, data);
45
49
  }
46
50
 
47
- static VALUE rb_roaring_initialize_copy(VALUE self, VALUE other) {
48
- roaring_bitmap_t *self_data;
49
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, self_data);
51
+ static roaring_bitmap_t *get_bitmap(VALUE obj) {
52
+ roaring_bitmap_t *bitmap;
53
+ TypedData_Get_Struct(obj, roaring_bitmap_t, &roaring_type, bitmap);
54
+ return bitmap;
55
+ }
50
56
 
51
- roaring_bitmap_t *other_data;
52
- TypedData_Get_Struct(other, roaring_bitmap_t, &roaring_type, other_data);
57
+ static VALUE rb_roaring_initialize_copy(VALUE self, VALUE other) {
58
+ roaring_bitmap_t *self_data = get_bitmap(self);
59
+ roaring_bitmap_t *other_data = get_bitmap(other);
53
60
 
54
61
  roaring_bitmap_overwrite(self_data, other_data);
55
62
 
@@ -58,45 +65,62 @@ static VALUE rb_roaring_initialize_copy(VALUE self, VALUE other) {
58
65
 
59
66
  static VALUE rb_roaring_cardinality(VALUE self)
60
67
  {
61
-
62
- roaring_bitmap_t *data;
63
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
68
+ roaring_bitmap_t *data = get_bitmap(self);
64
69
  uint64_t cardinality = roaring_bitmap_get_cardinality(data);
65
70
  return ULONG2NUM(cardinality);
66
71
  }
67
72
 
68
73
  static VALUE rb_roaring_add(VALUE self, VALUE val)
69
74
  {
70
- roaring_bitmap_t *data;
71
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
75
+ roaring_bitmap_t *data = get_bitmap(self);
72
76
 
73
77
  uint32_t num = NUM2UINT32(val);
74
78
  roaring_bitmap_add(data, num);
75
79
  return self;
76
80
  }
77
81
 
82
+ static VALUE rb_roaring_add_p(VALUE self, VALUE val)
83
+ {
84
+ roaring_bitmap_t *data = get_bitmap(self);
85
+
86
+ uint32_t num = NUM2UINT32(val);
87
+ return roaring_bitmap_add_checked(data, num) ? self : Qnil;
88
+ }
89
+
90
+ static VALUE rb_roaring_remove(VALUE self, VALUE val)
91
+ {
92
+ roaring_bitmap_t *data = get_bitmap(self);
93
+
94
+ uint32_t num = NUM2UINT32(val);
95
+ roaring_bitmap_remove(data, num);
96
+ return self;
97
+ }
98
+
99
+ static VALUE rb_roaring_remove_p(VALUE self, VALUE val)
100
+ {
101
+ roaring_bitmap_t *data = get_bitmap(self);
102
+
103
+ uint32_t num = NUM2UINT32(val);
104
+ return roaring_bitmap_remove_checked(data, num) ? self : Qnil;
105
+ }
106
+
78
107
  static VALUE rb_roaring_include_p(VALUE self, VALUE val)
79
108
  {
80
- roaring_bitmap_t *data;
81
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
109
+ roaring_bitmap_t *data = get_bitmap(self);
82
110
 
83
111
  uint32_t num = NUM2UINT32(val);
84
- return roaring_bitmap_contains(data, num) ? Qtrue : Qfalse;
112
+ return RBOOL(roaring_bitmap_contains(data, num));
85
113
  }
86
114
 
87
115
  static VALUE rb_roaring_empty_p(VALUE self)
88
116
  {
89
- roaring_bitmap_t *data;
90
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
91
-
92
- return roaring_bitmap_is_empty(data) ? Qtrue : Qfalse;
117
+ roaring_bitmap_t *data = get_bitmap(self);
118
+ return RBOOL(roaring_bitmap_is_empty(data));
93
119
  }
94
120
 
95
121
  static VALUE rb_roaring_clear(VALUE self)
96
122
  {
97
- roaring_bitmap_t *data;
98
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
99
-
123
+ roaring_bitmap_t *data = get_bitmap(self);
100
124
  roaring_bitmap_clear(data);
101
125
  return self;
102
126
  }
@@ -108,17 +132,14 @@ bool rb_roaring_each_i(uint32_t value, void *param) {
108
132
 
109
133
  static VALUE rb_roaring_each(VALUE self)
110
134
  {
111
- roaring_bitmap_t *data;
112
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
113
-
135
+ roaring_bitmap_t *data = get_bitmap(self);
114
136
  roaring_iterate(data, rb_roaring_each_i, NULL);
115
137
  return self;
116
138
  }
117
139
 
118
140
  static VALUE rb_roaring_aref(VALUE self, VALUE rankv)
119
141
  {
120
- roaring_bitmap_t *data;
121
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
142
+ roaring_bitmap_t *data = get_bitmap(self);
122
143
 
123
144
  uint32_t rank = NUM2UINT32(rankv);
124
145
  uint32_t val;
@@ -133,34 +154,37 @@ static VALUE rb_roaring_aref(VALUE self, VALUE rankv)
133
154
 
134
155
  static VALUE rb_roaring_min(VALUE self)
135
156
  {
136
- roaring_bitmap_t *data;
137
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
157
+ roaring_bitmap_t *data = get_bitmap(self);
138
158
 
139
- uint32_t val = roaring_bitmap_minimum(data);
140
- return UINT2NUM(val);
159
+ if (roaring_bitmap_is_empty(data)) {
160
+ return Qnil;
161
+ } else {
162
+ uint32_t val = roaring_bitmap_minimum(data);
163
+ return UINT2NUM(val);
164
+ }
141
165
  }
142
166
 
143
167
  static VALUE rb_roaring_max(VALUE self)
144
168
  {
145
- roaring_bitmap_t *data;
146
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
169
+ roaring_bitmap_t *data = get_bitmap(self);
147
170
 
148
- uint32_t val = roaring_bitmap_maximum(data);
149
- return UINT2NUM(val);
171
+ if (roaring_bitmap_is_empty(data)) {
172
+ return Qnil;
173
+ } else {
174
+ uint32_t val = roaring_bitmap_maximum(data);
175
+ return UINT2NUM(val);
176
+ }
150
177
  }
151
178
 
152
179
  static VALUE rb_roaring_run_optimize(VALUE self)
153
180
  {
154
- roaring_bitmap_t *data;
155
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
156
-
157
- return roaring_bitmap_run_optimize(data) ? Qtrue : Qfalse;
181
+ roaring_bitmap_t *data = get_bitmap(self);
182
+ return RBOOL(roaring_bitmap_run_optimize(data));
158
183
  }
159
184
 
160
185
  static VALUE rb_roaring_serialize(VALUE self)
161
186
  {
162
- roaring_bitmap_t *data;
163
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, data);
187
+ roaring_bitmap_t *data = get_bitmap(self);
164
188
 
165
189
  size_t size = roaring_bitmap_portable_size_in_bytes(data);
166
190
  VALUE str = rb_str_buf_new(size);
@@ -180,11 +204,8 @@ static VALUE rb_roaring_deserialize(VALUE self, VALUE str)
180
204
 
181
205
  typedef roaring_bitmap_t *binary_func(const roaring_bitmap_t *, const roaring_bitmap_t *);
182
206
  static VALUE rb_roaring_binary_op(VALUE self, VALUE other, binary_func func) {
183
- roaring_bitmap_t *self_data;
184
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, self_data);
185
-
186
- roaring_bitmap_t *other_data;
187
- TypedData_Get_Struct(other, roaring_bitmap_t, &roaring_type, other_data);
207
+ roaring_bitmap_t *self_data = get_bitmap(self);
208
+ roaring_bitmap_t *other_data = get_bitmap(other);
188
209
 
189
210
  roaring_bitmap_t *result = func(self_data, other_data);
190
211
 
@@ -193,14 +214,11 @@ static VALUE rb_roaring_binary_op(VALUE self, VALUE other, binary_func func) {
193
214
 
194
215
  typedef bool binary_func_bool(const roaring_bitmap_t *, const roaring_bitmap_t *);
195
216
  static VALUE rb_roaring_binary_op_bool(VALUE self, VALUE other, binary_func_bool func) {
196
- roaring_bitmap_t *self_data;
197
- TypedData_Get_Struct(self, roaring_bitmap_t, &roaring_type, self_data);
198
-
199
- roaring_bitmap_t *other_data;
200
- TypedData_Get_Struct(other, roaring_bitmap_t, &roaring_type, other_data);
217
+ roaring_bitmap_t *self_data = get_bitmap(self);
218
+ roaring_bitmap_t *other_data = get_bitmap(other);
201
219
 
202
220
  bool result = func(self_data, other_data);
203
- return result ? Qtrue : Qfalse;
221
+ return RBOOL(result);
204
222
  }
205
223
 
206
224
 
@@ -238,6 +256,12 @@ static VALUE rb_roaring_lte(VALUE self, VALUE other)
238
256
  {
239
257
  return rb_roaring_binary_op_bool(self, other, roaring_bitmap_is_subset);
240
258
  }
259
+
260
+ static VALUE rb_roaring_intersect_p(VALUE self, VALUE other)
261
+ {
262
+ return rb_roaring_binary_op_bool(self, other, roaring_bitmap_intersect);
263
+ }
264
+
241
265
  void
242
266
  Init_roaring(void)
243
267
  {
@@ -250,7 +274,10 @@ Init_roaring(void)
250
274
  rb_define_method(cRoaringBitmap, "clear", rb_roaring_clear, 0);
251
275
  rb_define_method(cRoaringBitmap, "cardinality", rb_roaring_cardinality, 0);
252
276
  rb_define_method(cRoaringBitmap, "add", rb_roaring_add, 1);
277
+ rb_define_method(cRoaringBitmap, "add?", rb_roaring_add_p, 1);
253
278
  rb_define_method(cRoaringBitmap, "<<", rb_roaring_add, 1);
279
+ rb_define_method(cRoaringBitmap, "remove", rb_roaring_remove, 1);
280
+ rb_define_method(cRoaringBitmap, "remove?", rb_roaring_remove_p, 1);
254
281
  rb_define_method(cRoaringBitmap, "include?", rb_roaring_include_p, 1);
255
282
  rb_define_method(cRoaringBitmap, "each", rb_roaring_each, 0);
256
283
  rb_define_method(cRoaringBitmap, "[]", rb_roaring_aref, 1);
@@ -263,6 +290,7 @@ Init_roaring(void)
263
290
  rb_define_method(cRoaringBitmap, "==", rb_roaring_eq, 1);
264
291
  rb_define_method(cRoaringBitmap, "<", rb_roaring_lt, 1);
265
292
  rb_define_method(cRoaringBitmap, "<=", rb_roaring_lte, 1);
293
+ rb_define_method(cRoaringBitmap, "intersect?", rb_roaring_intersect_p, 1);
266
294
 
267
295
  rb_define_method(cRoaringBitmap, "min", rb_roaring_min, 0);
268
296
  rb_define_method(cRoaringBitmap, "max", rb_roaring_max, 0);
@@ -0,0 +1,235 @@
1
+ The CRoaring project is under a dual license (Apache/MIT).
2
+ Users of the library may choose one or the other license.
3
+
4
+ ------------------
5
+
6
+ Apache License
7
+ Version 2.0, January 2004
8
+ http://www.apache.org/licenses/
9
+
10
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
11
+
12
+ 1. Definitions.
13
+
14
+ "License" shall mean the terms and conditions for use, reproduction,
15
+ and distribution as defined by Sections 1 through 9 of this document.
16
+
17
+ "Licensor" shall mean the copyright owner or entity authorized by
18
+ the copyright owner that is granting the License.
19
+
20
+ "Legal Entity" shall mean the union of the acting entity and all
21
+ other entities that control, are controlled by, or are under common
22
+ control with that entity. For the purposes of this definition,
23
+ "control" means (i) the power, direct or indirect, to cause the
24
+ direction or management of such entity, whether by contract or
25
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
26
+ outstanding shares, or (iii) beneficial ownership of such entity.
27
+
28
+ "You" (or "Your") shall mean an individual or Legal Entity
29
+ exercising permissions granted by this License.
30
+
31
+ "Source" form shall mean the preferred form for making modifications,
32
+ including but not limited to software source code, documentation
33
+ source, and configuration files.
34
+
35
+ "Object" form shall mean any form resulting from mechanical
36
+ transformation or translation of a Source form, including but
37
+ not limited to compiled object code, generated documentation,
38
+ and conversions to other media types.
39
+
40
+ "Work" shall mean the work of authorship, whether in Source or
41
+ Object form, made available under the License, as indicated by a
42
+ copyright notice that is included in or attached to the work
43
+ (an example is provided in the Appendix below).
44
+
45
+ "Derivative Works" shall mean any work, whether in Source or Object
46
+ form, that is based on (or derived from) the Work and for which the
47
+ editorial revisions, annotations, elaborations, or other modifications
48
+ represent, as a whole, an original work of authorship. For the purposes
49
+ of this License, Derivative Works shall not include works that remain
50
+ separable from, or merely link (or bind by name) to the interfaces of,
51
+ the Work and Derivative Works thereof.
52
+
53
+ "Contribution" shall mean any work of authorship, including
54
+ the original version of the Work and any modifications or additions
55
+ to that Work or Derivative Works thereof, that is intentionally
56
+ submitted to Licensor for inclusion in the Work by the copyright owner
57
+ or by an individual or Legal Entity authorized to submit on behalf of
58
+ the copyright owner. For the purposes of this definition, "submitted"
59
+ means any form of electronic, verbal, or written communication sent
60
+ to the Licensor or its representatives, including but not limited to
61
+ communication on electronic mailing lists, source code control systems,
62
+ and issue tracking systems that are managed by, or on behalf of, the
63
+ Licensor for the purpose of discussing and improving the Work, but
64
+ excluding communication that is conspicuously marked or otherwise
65
+ designated in writing by the copyright owner as "Not a Contribution."
66
+
67
+ "Contributor" shall mean Licensor and any individual or Legal Entity
68
+ on behalf of whom a Contribution has been received by Licensor and
69
+ subsequently incorporated within the Work.
70
+
71
+ 2. Grant of Copyright License. Subject to the terms and conditions of
72
+ this License, each Contributor hereby grants to You a perpetual,
73
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
74
+ copyright license to reproduce, prepare Derivative Works of,
75
+ publicly display, publicly perform, sublicense, and distribute the
76
+ Work and such Derivative Works in Source or Object form.
77
+
78
+ 3. Grant of Patent License. Subject to the terms and conditions of
79
+ this License, each Contributor hereby grants to You a perpetual,
80
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
81
+ (except as stated in this section) patent license to make, have made,
82
+ use, offer to sell, sell, import, and otherwise transfer the Work,
83
+ where such license applies only to those patent claims licensable
84
+ by such Contributor that are necessarily infringed by their
85
+ Contribution(s) alone or by combination of their Contribution(s)
86
+ with the Work to which such Contribution(s) was submitted. If You
87
+ institute patent litigation against any entity (including a
88
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
89
+ or a Contribution incorporated within the Work constitutes direct
90
+ or contributory patent infringement, then any patent licenses
91
+ granted to You under this License for that Work shall terminate
92
+ as of the date such litigation is filed.
93
+
94
+ 4. Redistribution. You may reproduce and distribute copies of the
95
+ Work or Derivative Works thereof in any medium, with or without
96
+ modifications, and in Source or Object form, provided that You
97
+ meet the following conditions:
98
+
99
+ (a) You must give any other recipients of the Work or
100
+ Derivative Works a copy of this License; and
101
+
102
+ (b) You must cause any modified files to carry prominent notices
103
+ stating that You changed the files; and
104
+
105
+ (c) You must retain, in the Source form of any Derivative Works
106
+ that You distribute, all copyright, patent, trademark, and
107
+ attribution notices from the Source form of the Work,
108
+ excluding those notices that do not pertain to any part of
109
+ the Derivative Works; and
110
+
111
+ (d) If the Work includes a "NOTICE" text file as part of its
112
+ distribution, then any Derivative Works that You distribute must
113
+ include a readable copy of the attribution notices contained
114
+ within such NOTICE file, excluding those notices that do not
115
+ pertain to any part of the Derivative Works, in at least one
116
+ of the following places: within a NOTICE text file distributed
117
+ as part of the Derivative Works; within the Source form or
118
+ documentation, if provided along with the Derivative Works; or,
119
+ within a display generated by the Derivative Works, if and
120
+ wherever such third-party notices normally appear. The contents
121
+ of the NOTICE file are for informational purposes only and
122
+ do not modify the License. You may add Your own attribution
123
+ notices within Derivative Works that You distribute, alongside
124
+ or as an addendum to the NOTICE text from the Work, provided
125
+ that such additional attribution notices cannot be construed
126
+ as modifying the License.
127
+
128
+ You may add Your own copyright statement to Your modifications and
129
+ may provide additional or different license terms and conditions
130
+ for use, reproduction, or distribution of Your modifications, or
131
+ for any such Derivative Works as a whole, provided Your use,
132
+ reproduction, and distribution of the Work otherwise complies with
133
+ the conditions stated in this License.
134
+
135
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
136
+ any Contribution intentionally submitted for inclusion in the Work
137
+ by You to the Licensor shall be under the terms and conditions of
138
+ this License, without any additional terms or conditions.
139
+ Notwithstanding the above, nothing herein shall supersede or modify
140
+ the terms of any separate license agreement you may have executed
141
+ with Licensor regarding such Contributions.
142
+
143
+ 6. Trademarks. This License does not grant permission to use the trade
144
+ names, trademarks, service marks, or product names of the Licensor,
145
+ except as required for reasonable and customary use in describing the
146
+ origin of the Work and reproducing the content of the NOTICE file.
147
+
148
+ 7. Disclaimer of Warranty. Unless required by applicable law or
149
+ agreed to in writing, Licensor provides the Work (and each
150
+ Contributor provides its Contributions) on an "AS IS" BASIS,
151
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
152
+ implied, including, without limitation, any warranties or conditions
153
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
154
+ PARTICULAR PURPOSE. You are solely responsible for determining the
155
+ appropriateness of using or redistributing the Work and assume any
156
+ risks associated with Your exercise of permissions under this License.
157
+
158
+ 8. Limitation of Liability. In no event and under no legal theory,
159
+ whether in tort (including negligence), contract, or otherwise,
160
+ unless required by applicable law (such as deliberate and grossly
161
+ negligent acts) or agreed to in writing, shall any Contributor be
162
+ liable to You for damages, including any direct, indirect, special,
163
+ incidental, or consequential damages of any character arising as a
164
+ result of this License or out of the use or inability to use the
165
+ Work (including but not limited to damages for loss of goodwill,
166
+ work stoppage, computer failure or malfunction, or any and all
167
+ other commercial damages or losses), even if such Contributor
168
+ has been advised of the possibility of such damages.
169
+
170
+ 9. Accepting Warranty or Additional Liability. While redistributing
171
+ the Work or Derivative Works thereof, You may choose to offer,
172
+ and charge a fee for, acceptance of support, warranty, indemnity,
173
+ or other liability obligations and/or rights consistent with this
174
+ License. However, in accepting such obligations, You may act only
175
+ on Your own behalf and on Your sole responsibility, not on behalf
176
+ of any other Contributor, and only if You agree to indemnify,
177
+ defend, and hold each Contributor harmless for any liability
178
+ incurred by, or claims asserted against, such Contributor by reason
179
+ of your accepting any such warranty or additional liability.
180
+
181
+ END OF TERMS AND CONDITIONS
182
+
183
+ APPENDIX: How to apply the Apache License to your work.
184
+
185
+ To apply the Apache License to your work, attach the following
186
+ boilerplate notice, with the fields enclosed by brackets "{}"
187
+ replaced with your own identifying information. (Don't include
188
+ the brackets!) The text should be enclosed in the appropriate
189
+ comment syntax for the file format. We also recommend that a
190
+ file or class name and description of purpose be included on the
191
+ same "printed page" as the copyright notice for easier
192
+ identification within third-party archives.
193
+
194
+ Copyright 2016-2022 The CRoaring authors
195
+
196
+ Licensed under the Apache License, Version 2.0 (the "License");
197
+ you may not use this file except in compliance with the License.
198
+ You may obtain a copy of the License at
199
+
200
+ http://www.apache.org/licenses/LICENSE-2.0
201
+
202
+ Unless required by applicable law or agreed to in writing, software
203
+ distributed under the License is distributed on an "AS IS" BASIS,
204
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
205
+ See the License for the specific language governing permissions and
206
+ limitations under the License.
207
+
208
+ -----------------------------------
209
+
210
+ MIT License
211
+
212
+ Copyright 2016-2022 The CRoaring authors
213
+
214
+ Permission is hereby granted, free of charge, to any
215
+ person obtaining a copy of this software and associated
216
+ documentation files (the "Software"), to deal in the
217
+ Software without restriction, including without
218
+ limitation the rights to use, copy, modify, merge,
219
+ publish, distribute, sublicense, and/or sell copies of
220
+ the Software, and to permit persons to whom the Software
221
+ is furnished to do so, subject to the following
222
+ conditions:
223
+
224
+ The above copyright notice and this permission notice
225
+ shall be included in all copies or substantial portions
226
+ of the Software.
227
+
228
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
229
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
230
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
231
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
232
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
233
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
234
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
235
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
@@ -0,0 +1,42 @@
1
+ # CRoaringUnityBuild
2
+ Dumps of CRoaring unity builds (for convenience)
3
+
4
+ This code is automatically generated from https://github.com/RoaringBitmap/CRoaring
5
+
6
+ ## Building
7
+
8
+ ```bash
9
+ echo -e "#include <roaring.hh>\n int main(){Roaring x;}" > test.cpp && cc -c roaring.c -I. -std=c11 && c++ -o test test.cpp roaring.o -I. -std=c++11
10
+ ```
11
+
12
+ You need to compile and link `roaring.c` with your project: this is not a header-only build.
13
+
14
+ ## Usage (C)
15
+
16
+ ```C
17
+ #include <stdio.h>
18
+ #include "roaring.c"
19
+ int main() {
20
+ roaring_bitmap_t *r1 = roaring_bitmap_create();
21
+ for (uint32_t i = 100; i < 1000; i++) roaring_bitmap_add(r1, i);
22
+ printf("cardinality = %d\n", (int) roaring_bitmap_get_cardinality(r1));
23
+ roaring_bitmap_free(r1);
24
+ return 0;
25
+ }
26
+ ```
27
+ ## Usage (C++)
28
+
29
+
30
+ ```C++
31
+ #include <iostream>
32
+ #include "roaring.hh"
33
+ #include "roaring.c"
34
+ int main() {
35
+ Roaring r1;
36
+ for (uint32_t i = 100; i < 1000; i++) {
37
+ r1.add(i);
38
+ }
39
+ std::cout << "cardinality = " << r1.cardinality() << std::endl;
40
+  return 0;
41
+ }
42
+ ```