From c016371196c7803135fdecff07d8fe420a199a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Sat, 12 Sep 2020 18:33:19 +0200 Subject: [PATCH] Simplify the run run intersect_with operation --- src/bitmap/store.rs | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/bitmap/store.rs b/src/bitmap/store.rs index 94e1559cc..272437a7a 100644 --- a/src/bitmap/store.rs +++ b/src/bitmap/store.rs @@ -521,26 +521,23 @@ impl Store { let (mut i1, mut i2) = (intervals1.iter(), intervals2.iter()); let (mut iv1, mut iv2) = (i1.next(), i2.next()); - loop { - if let (Some(v1), Some(v2)) = (iv1, iv2) { - let start = cmp::max(v1.start, v2.start); - let end = cmp::min(v1.end, v2.end); - let iv = Interval::new(start, end); - if iv.run_len() > 0 { - merged.push(iv); - } + + // Iterate over two iterators, consuming the lowest first, like merge joins. + while let (Some(v1), Some(v2)) = (iv1, iv2) { + let start = cmp::max(v1.start, v2.start); + let end = cmp::min(v1.end, v2.end); + let iv = Interval::new(start, end); + if iv.run_len() > 0 { + merged.push(iv); } - // Iterate over two iterators, consuming the lowest first, like merge join. - match (iv1, iv2) { - (None, None) => break, - (Some(v1), None) => iv1 = i1.next(), - (None, Some(v2)) => iv2 = i2.next(), - (Some(v1), Some(v2)) => match v1.start.cmp(&v2.start) { - Equal => { iv1 = i1.next(); iv2 = i2.next(); }, - Less => iv1 = i1.next(), - Greater => iv2 = i2.next(), + match v1.start.cmp(&v2.start) { + Equal => { + iv1 = i1.next(); + iv2 = i2.next(); }, + Less => iv1 = i1.next(), + Greater => iv2 = i2.next(), } }