in common/rusty_leveldb_sgx/src/merging_iter.rs [52:97]
fn update_direction(&mut self, d: Direction) {
if self.direction == d {
return;
}
let mut keybuf = vec![];
let mut valbuf = vec![];
if let Some((key, _)) = current_key_val(self) {
if let Some(current) = self.current {
match d {
Direction::Forward if self.direction == Direction::Reverse => {
self.direction = Direction::Forward;
for i in 0..self.iters.len() {
if i != current {
self.iters[i].seek(&key);
// This doesn't work if two iterators are returning the exact same
// keys. However, in reality, two entries will always have differing
// sequence numbers.
if self.iters[i].current(&mut keybuf, &mut valbuf) {
if self.cmp.cmp(&keybuf, &key) == Ordering::Equal {
self.iters[i].advance();
}
}
}
}
}
Direction::Reverse if self.direction == Direction::Forward => {
self.direction = Direction::Reverse;
for i in 0..self.iters.len() {
if i != current {
self.iters[i].seek(&key);
if self.iters[i].valid() {
self.iters[i].prev();
} else {
// seek to last.
while self.iters[i].advance() {}
}
}
}
}
_ => {}
}
}
}
}