in common/rusty_leveldb_sgx/src/version_set.rs [909:949]
fn merge_iters<
Item,
C: Fn(&Item, &Item) -> Ordering,
I: Iterator<Item = Item>,
J: Iterator<Item = Item>,
>(
mut iter_a: I,
mut iter_b: J,
cmp: C,
) -> Vec<Item> {
let mut a = iter_a.next();
let mut b = iter_b.next();
let mut out = vec![];
while a.is_some() && b.is_some() {
let ord = cmp(a.as_ref().unwrap(), b.as_ref().unwrap());
if ord == Ordering::Less {
out.push(a.unwrap());
a = iter_a.next();
} else {
out.push(b.unwrap());
b = iter_b.next();
}
}
// Push cached elements.
if let Some(a_) = a {
out.push(a_);
}
if let Some(b_) = b {
out.push(b_);
}
// Push remaining elements from either iterator.
for a in iter_a {
out.push(a);
}
for b in iter_b {
out.push(b);
}
out
}