Skip to content

Commit 6391a97

Browse files
authored
Merge pull request #281 from RoaringBitmap/intersection-with-serialized
Direct intersections with serialized RoaringBitmaps
2 parents 2288f7c + 457b2c9 commit 6391a97

File tree

10 files changed

+339
-18
lines changed

10 files changed

+339
-18
lines changed

src/bitmap/container.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ impl Container {
3737
self.store.len()
3838
}
3939

40+
pub fn is_empty(&self) -> bool {
41+
self.store.is_empty()
42+
}
43+
4044
pub fn insert(&mut self, index: u16) -> bool {
4145
if self.store.insert(index) {
4246
self.ensure_correct_store();

src/bitmap/inherent.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ impl RoaringBitmap {
208208
match self.containers.binary_search_by_key(&key, |c| c.key) {
209209
Ok(loc) => {
210210
if self.containers[loc].remove(index) {
211-
if self.containers[loc].len() == 0 {
211+
if self.containers[loc].is_empty() {
212212
self.containers.remove(loc);
213213
}
214214
true
@@ -253,7 +253,7 @@ impl RoaringBitmap {
253253
let a = if key == start_container_key { start_index } else { 0 };
254254
let b = if key == end_container_key { end_index } else { u16::MAX };
255255
removed += self.containers[index].remove_range(a..=b);
256-
if self.containers[index].len() == 0 {
256+
if self.containers[index].is_empty() {
257257
self.containers.remove(index);
258258
continue;
259259
}

src/bitmap/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ mod cmp;
1212
mod inherent;
1313
mod iter;
1414
mod ops;
15+
#[cfg(feature = "std")]
16+
mod ops_with_serialized;
1517
#[cfg(feature = "serde")]
1618
mod serde;
1719
#[cfg(feature = "std")]
18-
mod serialization;
20+
pub(crate) mod serialization;
1921

2022
use self::cmp::Pairs;
2123
pub use self::iter::IntoIter;

src/bitmap/multiops.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ fn try_multi_or_owned<E>(
232232
}
233233

234234
containers.retain_mut(|container| {
235-
if container.len() > 0 {
235+
if !container.is_empty() {
236236
container.ensure_correct_store();
237237
true
238238
} else {
@@ -258,7 +258,7 @@ fn try_multi_xor_owned<E>(
258258
}
259259

260260
containers.retain_mut(|container| {
261-
if container.len() > 0 {
261+
if !container.is_empty() {
262262
container.ensure_correct_store();
263263
true
264264
} else {

src/bitmap/ops.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ impl BitAnd<&RoaringBitmap> for &RoaringBitmap {
223223
for pair in Pairs::new(&self.containers, &rhs.containers) {
224224
if let (Some(lhs), Some(rhs)) = pair {
225225
let container = BitAnd::bitand(lhs, rhs);
226-
if container.len() != 0 {
226+
if !container.is_empty() {
227227
containers.push(container);
228228
}
229229
}
@@ -248,7 +248,7 @@ impl BitAndAssign<RoaringBitmap> for RoaringBitmap {
248248
let rhs_cont = &mut rhs.containers[loc];
249249
let rhs_cont = mem::replace(rhs_cont, Container::new(rhs_cont.key));
250250
BitAndAssign::bitand_assign(cont, rhs_cont);
251-
cont.len() != 0
251+
!cont.is_empty()
252252
}
253253
Err(_) => false,
254254
}
@@ -264,7 +264,7 @@ impl BitAndAssign<&RoaringBitmap> for RoaringBitmap {
264264
match rhs.containers.binary_search_by_key(&key, |c| c.key) {
265265
Ok(loc) => {
266266
BitAndAssign::bitand_assign(cont, &rhs.containers[loc]);
267-
cont.len() != 0
267+
!cont.is_empty()
268268
}
269269
Err(_) => false,
270270
}
@@ -314,7 +314,7 @@ impl Sub<&RoaringBitmap> for &RoaringBitmap {
314314
(None, Some(_)) => (),
315315
(Some(lhs), Some(rhs)) => {
316316
let container = Sub::sub(lhs, rhs);
317-
if container.len() != 0 {
317+
if !container.is_empty() {
318318
containers.push(container);
319319
}
320320
}
@@ -340,7 +340,7 @@ impl SubAssign<&RoaringBitmap> for RoaringBitmap {
340340
match rhs.containers.binary_search_by_key(&cont.key, |c| c.key) {
341341
Ok(loc) => {
342342
SubAssign::sub_assign(cont, &rhs.containers[loc]);
343-
cont.len() != 0
343+
!cont.is_empty()
344344
}
345345
Err(_) => true,
346346
}
@@ -390,7 +390,7 @@ impl BitXor<&RoaringBitmap> for &RoaringBitmap {
390390
(None, Some(rhs)) => containers.push(rhs.clone()),
391391
(Some(lhs), Some(rhs)) => {
392392
let container = BitXor::bitxor(lhs, rhs);
393-
if container.len() != 0 {
393+
if !container.is_empty() {
394394
containers.push(container);
395395
}
396396
}
@@ -409,7 +409,7 @@ impl BitXorAssign<RoaringBitmap> for RoaringBitmap {
409409
match pair {
410410
(Some(mut lhs), Some(rhs)) => {
411411
BitXorAssign::bitxor_assign(&mut lhs, rhs);
412-
if lhs.len() != 0 {
412+
if !lhs.is_empty() {
413413
self.containers.push(lhs);
414414
}
415415
}
@@ -428,7 +428,7 @@ impl BitXorAssign<&RoaringBitmap> for RoaringBitmap {
428428
match pair {
429429
(Some(mut lhs), Some(rhs)) => {
430430
BitXorAssign::bitxor_assign(&mut lhs, rhs);
431-
if lhs.len() != 0 {
431+
if !lhs.is_empty() {
432432
self.containers.push(lhs);
433433
}
434434
}

0 commit comments

Comments
 (0)