in common/rusty_leveldb_sgx/src/skipmap.rs [112:151]
fn get_greater_or_equal<'a>(&'a self, key: &[u8]) -> Option<&'a Node> {
// Start at the highest skip link of the head node, and work down from there
let mut current = self.head.as_ref() as *const Node;
let mut level = self.head.skips.len() - 1;
loop {
unsafe {
if let Some(next) = (*current).skips[level] {
let ord = self.cmp.cmp((*next).key.as_slice(), key);
match ord {
Ordering::Less => {
current = next;
continue;
}
Ordering::Equal => return Some(&(*next)),
Ordering::Greater => {
if level == 0 {
return Some(&(*next));
}
}
}
}
}
if level == 0 {
break;
}
level -= 1;
}
unsafe {
if current.is_null() || current == self.head.as_ref() {
return None;
} else if self.cmp.cmp(&(*current).key, key) == Ordering::Less {
return None;
} else {
return Some(&(*current));
}
}
}