Skip to content

Commit 4ae8986

Browse files
committed
Simplify the run run intersect_with operation
1 parent 9612ae9 commit 4ae8986

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

src/bitmap/store.rs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -521,26 +521,23 @@ impl Store {
521521

522522
let (mut i1, mut i2) = (intervals1.iter(), intervals2.iter());
523523
let (mut iv1, mut iv2) = (i1.next(), i2.next());
524-
loop {
525-
if let (Some(v1), Some(v2)) = (iv1, iv2) {
524+
525+
// Iterate over both iterators.
526+
while let (Some(v1), Some(v2)) = (iv1, iv2) {
527+
if v2.start <= v1.end && v1.start <= v2.end {
526528
let start = cmp::max(v1.start, v2.start);
527529
let end = cmp::min(v1.end, v2.end);
528530
let iv = Interval::new(start, end);
529-
if iv.run_len() > 0 {
530-
merged.push(iv);
531-
}
531+
merged.push(iv);
532532
}
533533

534-
// Iterate over two iterators, consuming the lowest first, like merge join.
535-
match (iv1, iv2) {
536-
(None, None) => break,
537-
(Some(v1), None) => iv1 = i1.next(),
538-
(None, Some(v2)) => iv2 = i2.next(),
539-
(Some(v1), Some(v2)) => match v1.start.cmp(&v2.start) {
540-
Equal => { iv1 = i1.next(); iv2 = i2.next(); },
541-
Less => iv1 = i1.next(),
542-
Greater => iv2 = i2.next(),
543-
},
534+
if v1.end < v2.end {
535+
iv1 = i1.next();
536+
} else if v1.end > v2.end {
537+
iv2 = i2.next();
538+
} else {
539+
iv1 = i1.next();
540+
iv2 = i2.next();
544541
}
545542
}
546543

0 commit comments

Comments
 (0)