Skip to content

Commit a9281a4

Browse files
committed
Fix Explicit Cumulative Index 'get' method
1 parent 0908dcb commit a9281a4

1 file changed

Lines changed: 11 additions & 14 deletions

File tree

src/nested/sort/cindex.rs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,7 +1362,7 @@ impl<H: HHash, T: HCIndexValue> HCIndex for OwnedCIndexExplicit<H, T> {
13621362
let hash = H::from_u64(hash);
13631363
match self.entries.binary_search_by_key(&hash, |&(h, _)| h) {
13641364
Ok(i) => self.entries[i].1,
1365-
Err(i) => self.entries[i.max(1) - 1].1,
1365+
Err(i) => self.entries[i.min(self.entries.len() - 1)].1,
13661366
}
13671367
}
13681368
fn write_all_values_implicit<W: Write>(&self, writer: W) -> Result<usize, IoError> {
@@ -1421,17 +1421,14 @@ impl<H: HHash, T: HCIndexValue> HCIndex for OwnedCIndexExplicitBTree<H, T> {
14211421

14221422
fn get(&self, hash: u64) -> Self::V {
14231423
let hash = H::from_u64(hash);
1424-
match self.entries.get(&hash) {
1425-
Some(v) => *v,
1426-
None => match self.entries.range(..hash).next_back() {
1427-
Some((_h, v)) => *v,
1428-
None => self
1429-
.entries
1430-
.iter()
1431-
.next()
1432-
.map(|e| *e.1)
1433-
.unwrap_or(T::zero()),
1434-
},
1424+
match self.entries.range(hash..).next() {
1425+
Some((_k, v)) => *v,
1426+
// Unwrap only if the tree is empty
1427+
None => self
1428+
.entries
1429+
.last_key_value()
1430+
.map(|(_k, v)| *v)
1431+
.unwrap_or(T::zero()),
14351432
}
14361433
}
14371434

@@ -1702,12 +1699,12 @@ impl<'a, H: HHash, T: HCIndexValue> HCIndex for BorrowedCIndexExplicit<'a, H, T>
17021699
if self.depth <= 13 {
17031700
match self.binary_search_get_u32(hash as u32) {
17041701
Ok(i) => self.get_entry::<u32>(i).1,
1705-
Err(i) => self.get_entry::<u32>(i.max(1) - 1).1,
1702+
Err(i) => self.get_entry::<u32>(i.min(self.len() - 1)).1,
17061703
}
17071704
} else {
17081705
match self.binary_search_get_u64(hash) {
17091706
Ok(i) => self.get_entry::<u64>(i).1,
1710-
Err(i) => self.get_entry::<u64>(i.max(1) - 1).1,
1707+
Err(i) => self.get_entry::<u64>(i.min(self.len() - 1) - 1).1,
17111708
}
17121709
}
17131710
}

0 commit comments

Comments
 (0)