in common/rusty_leveldb_sgx/src/db_iter.rs [74:106]
fn find_next_user_entry(&mut self, mut skipping: bool) -> bool {
assert!(self.iter.valid());
assert!(self.dir == Direction::Forward);
while self.iter.valid() {
self.iter.current(&mut self.keybuf, &mut self.savedval);
let len = self.keybuf.len() + self.savedval.len();
self.record_read_sample(len);
let (typ, seq, ukey) = parse_internal_key(&self.keybuf);
// Skip keys with a sequence number after our snapshot.
if seq <= self.ss.sequence() {
if typ == ValueType::TypeDeletion {
// Mark current (deleted) key to be skipped.
self.savedkey.clear();
self.savedkey.extend_from_slice(ukey);
skipping = true;
} else if typ == ValueType::TypeValue {
if skipping && self.cmp.cmp(ukey, &self.savedkey) <= Ordering::Equal {
// Entry hidden, because it's smaller than the key to be skipped.
} else {
self.valid = true;
self.savedkey.clear();
return true;
}
}
}
self.iter.advance();
}
self.savedkey.clear();
self.valid = false;
false
}