in common/rusty_leveldb_sgx/src/db_iter.rs [211:241]
fn prev(&mut self) -> bool {
if !self.valid() {
return false;
}
if self.dir == Direction::Forward {
// scan backwards until we hit a different key; then use the normal scanning procedure:
// find_prev_user_entry() wants savedkey to be the key of the entry that is supposed to
// be left in savedkey/savedval, which is why we have to go to the previous entry before
// calling it.
self.iter.current(&mut self.savedkey, &mut self.savedval);
truncate_to_userkey(&mut self.savedkey);
loop {
self.iter.prev();
if !self.iter.valid() {
self.valid = false;
self.savedkey.clear();
self.savedval.clear();
return false;
}
// Scan until we hit the next-smaller key.
self.iter.current(&mut self.keybuf, &mut self.savedval);
truncate_to_userkey(&mut self.keybuf);
if self.cmp.cmp(&self.keybuf, &self.savedkey) == Ordering::Less {
break;
}
}
self.dir = Direction::Reverse;
}
self.find_prev_user_entry()
}