in common/rusty_leveldb_sgx/src/version.rs [309:348]
fn do_search(
myself: &Version,
level: usize,
ubegin: Vec<u8>,
uend: Vec<u8>,
) -> (Option<(Vec<u8>, Vec<u8>)>, Vec<FileMetaHandle>) {
let mut inputs = vec![];
for f_ in myself.files[level].iter() {
let f = f_.borrow();
let (fsmallest, flargest) = (
parse_internal_key(&f.smallest).2,
parse_internal_key(&f.largest).2,
);
// Skip files that are not overlapping.
if !ubegin.is_empty() && myself.user_cmp.cmp(flargest, &ubegin) == Ordering::Less {
continue;
} else if !uend.is_empty()
&& myself.user_cmp.cmp(fsmallest, &uend) == Ordering::Greater
{
continue;
} else {
inputs.push(f_.clone());
// In level 0, files may overlap each other. Check if the new file begins
// before ubegin or ends after uend, and expand the range, if so. Then, restart
// the search.
if level == 0 {
if !ubegin.is_empty()
&& myself.user_cmp.cmp(fsmallest, &ubegin) == Ordering::Less
{
return (Some((fsmallest.to_vec(), uend)), inputs);
} else if !uend.is_empty()
&& myself.user_cmp.cmp(flargest, &uend) == Ordering::Greater
{
return (Some((ubegin, flargest.to_vec())), inputs);
}
}
}
}
(None, inputs)
}