@@ -397,6 +397,7 @@ impl<BorrowType, K, V, Type> NodeRef<BorrowType, K, V, Type> {
397
397
398
398
/// Borrows a view into the values stored in the node.
399
399
/// The caller must ensure that the node is not the shared root.
400
+ /// This function is not public, so doesn't have to support shared roots like `keys` does.
400
401
fn vals(&self) -> &[V] {
401
402
self.reborrow().into_val_slice()
402
403
}
@@ -514,6 +515,7 @@ impl<'a, K, V, Type> NodeRef<marker::Mut<'a>, K, V, Type> {
514
515
}
515
516
516
517
/// The caller must ensure that the node is not the shared root.
518
+ /// This function is not public, so doesn't have to support shared roots like `keys` does.
517
519
fn keys_mut(&mut self) -> &mut [K] {
518
520
unsafe { self.reborrow_mut().into_key_slice_mut() }
519
521
}
@@ -590,19 +592,13 @@ impl<'a, K: 'a, V: 'a, Type> NodeRef<marker::Mut<'a>, K, V, Type> {
590
592
}
591
593
592
594
fn into_key_slice_mut(mut self) -> &'a mut [K] {
593
- // Same as for `into_key_slice` above, we try to avoid a run-time check.
594
- if (mem::align_of::<NodeHeader<K, V, K>>() > mem::align_of::<NodeHeader<K, V>>()
595
- || mem::size_of::<NodeHeader<K, V, K>>() != mem::size_of::<NodeHeader<K, V>>())
596
- && self.is_shared_root()
597
- {
598
- &mut []
599
- } else {
600
- unsafe {
601
- slice::from_raw_parts_mut(
602
- MaybeUninit::first_ptr_mut(&mut (*self.as_leaf_mut()).keys),
603
- self.len(),
604
- )
605
- }
595
+ debug_assert!(!self.is_shared_root());
596
+ // We cannot be the shared root, so `as_leaf_mut` is okay.
597
+ unsafe {
598
+ slice::from_raw_parts_mut(
599
+ MaybeUninit::first_ptr_mut(&mut (*self.as_leaf_mut()).keys),
600
+ self.len(),
601
+ )
606
602
}
607
603
}
608
604
0 commit comments