Skip to content

Commit 6ab5931

Browse files
committed
Improve binary search performance
1 parent e3ae9e3 commit 6ab5931

File tree

1 file changed

+15
-17
lines changed

1 file changed

+15
-17
lines changed

src/node.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,27 +2225,25 @@ impl Inner {
22252225
if size == 0 || self.index_key(0).unwrap_slice() > key {
22262226
return Err(0);
22272227
}
2228-
let mut base = 0_usize;
2229-
while size > 1 {
2230-
let half = size / 2;
2231-
let mid = base + half;
2232-
// mid is always in [0, size), that means mid is >= 0 and < size.
2233-
// mid >= 0: by definition
2234-
// mid < size: mid = size / 2 + size / 4 + size / 8 ...
2228+
let mut left = 0;
2229+
let mut right = size;
2230+
while left < right {
2231+
let mid = left + size / 2;
2232+
22352233
let l = self.index_key(mid);
22362234
let cmp = crate::fastcmp(l.unwrap_slice(), key);
2237-
base = if cmp == Greater { base } else { mid };
2238-
size -= half;
2239-
}
2240-
// base is always in [0, size) because base <= mid.
2241-
let l = self.index_key(base);
2242-
let cmp = crate::fastcmp(l.unwrap_slice(), key);
22432235

2244-
if cmp == Equal {
2245-
Ok(base)
2246-
} else {
2247-
Err(base + (cmp == Less) as usize)
2236+
if cmp == Less {
2237+
left = mid + 1;
2238+
} else if cmp == Greater {
2239+
right = mid;
2240+
} else {
2241+
return Ok(mid);
2242+
}
2243+
2244+
size = right - left;
22482245
}
2246+
Err(left)
22492247
}
22502248

22512249
pub(crate) fn can_merge_child(&self, pid: u64) -> bool {

0 commit comments

Comments
 (0)