Skip to content

Commit 926dc1f

Browse files
committed
Uses retain instead of remove in array array difference
1 parent 68123b5 commit 926dc1f

File tree

1 file changed

+5
-18
lines changed

1 file changed

+5
-18
lines changed

src/bitmap/store.rs

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -348,24 +348,11 @@ impl Store {
348348
pub fn difference_with(&mut self, other: &Self) {
349349
match (self, other) {
350350
(&mut Array(ref mut vec1), &Array(ref vec2)) => {
351-
let mut i1 = 0usize;
352-
let mut iter2 = vec2.iter();
353-
let mut current2 = iter2.next();
354-
while i1 < vec1.len() {
355-
match current2.map(|c2| vec1[i1].cmp(c2)) {
356-
None => break,
357-
Some(Less) => {
358-
i1 += 1;
359-
}
360-
Some(Greater) => {
361-
current2 = iter2.next();
362-
}
363-
Some(Equal) => {
364-
vec1.remove(i1);
365-
current2 = iter2.next();
366-
}
367-
}
368-
}
351+
let mut i = 0;
352+
vec1.retain(|x| {
353+
i += vec2.iter().skip(i).position(|y| y >= x).unwrap_or(vec2.len());
354+
vec2.get(i).map_or(true, |y| x != y)
355+
});
369356
}
370357
(ref mut this @ &mut Bitmap(..), &Array(ref vec2)) => {
371358
for index in vec2.iter() {

0 commit comments

Comments
 (0)