@@ -2728,8 +2728,7 @@ impl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInter
2728
2728
let mut at_leaf = true ;
2729
2729
while cur_node. len ( ) < node:: MIN_LEN {
2730
2730
match handle_underfull_node ( cur_node) {
2731
- AtRoot ( _) => break ,
2732
- EmptyParent ( _) => unreachable ! ( ) ,
2731
+ AtRoot => break ,
2733
2732
Merged ( edge, merged_with_left, offset) => {
2734
2733
// If we merged with our right sibling then our tracked
2735
2734
// position has not changed. However if we merged with our
@@ -2740,7 +2739,6 @@ impl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInter
2740
2739
Leaf ( leaf) => leaf,
2741
2740
Internal ( _) => unreachable ! ( ) ,
2742
2741
} ;
2743
- debug_assert ! ( idx <= node. len( ) ) ;
2744
2742
pos = unsafe { Handle :: new_edge ( node, idx) } ;
2745
2743
}
2746
2744
@@ -2754,7 +2752,7 @@ impl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInter
2754
2752
at_leaf = false ;
2755
2753
}
2756
2754
}
2757
- Stole ( _ , stole_from_left) => {
2755
+ Stole ( stole_from_left) => {
2758
2756
// Adjust the tracked position if we stole from a left sibling
2759
2757
if stole_from_left && at_leaf {
2760
2758
// SAFETY: This is safe since we just added an element to our node.
@@ -2781,28 +2779,25 @@ impl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInter
2781
2779
}
2782
2780
2783
2781
enum UnderflowResult < ' a , K , V > {
2784
- AtRoot ( NodeRef < marker:: Mut < ' a > , K , V , marker:: LeafOrInternal > ) ,
2785
- EmptyParent ( NodeRef < marker:: Mut < ' a > , K , V , marker:: Internal > ) ,
2782
+ AtRoot ,
2786
2783
Merged ( Handle < NodeRef < marker:: Mut < ' a > , K , V , marker:: Internal > , marker:: Edge > , bool , usize ) ,
2787
- Stole ( NodeRef < marker :: Mut < ' a > , K , V , marker :: Internal > , bool ) ,
2784
+ Stole ( bool ) ,
2788
2785
}
2789
2786
2790
2787
fn handle_underfull_node < K , V > (
2791
2788
node : NodeRef < marker:: Mut < ' _ > , K , V , marker:: LeafOrInternal > ,
2792
2789
) -> UnderflowResult < ' _ , K , V > {
2793
2790
let parent = match node. ascend ( ) {
2794
2791
Ok ( parent) => parent,
2795
- Err ( root ) => return AtRoot ( root ) ,
2792
+ Err ( _ ) => return AtRoot ,
2796
2793
} ;
2797
2794
2798
2795
let ( is_left, mut handle) = match parent. left_kv ( ) {
2799
2796
Ok ( left) => ( true , left) ,
2800
- Err ( parent) => match parent. right_kv ( ) {
2801
- Ok ( right) => ( false , right) ,
2802
- Err ( parent) => {
2803
- return EmptyParent ( parent. into_node ( ) ) ;
2804
- }
2805
- } ,
2797
+ Err ( parent) => {
2798
+ let right = unsafe { unwrap_unchecked ( parent. right_kv ( ) . ok ( ) ) } ;
2799
+ ( false , right)
2800
+ }
2806
2801
} ;
2807
2802
2808
2803
if handle. can_merge ( ) {
@@ -2814,7 +2809,7 @@ fn handle_underfull_node<K, V>(
2814
2809
} else {
2815
2810
handle. steal_right ( ) ;
2816
2811
}
2817
- Stole ( handle . into_node ( ) , is_left)
2812
+ Stole ( is_left)
2818
2813
}
2819
2814
}
2820
2815
0 commit comments