Skip to content

Commit 1a600eb

Browse files
committed
Easy way to respect BTreeMap's minimum node length
1 parent 119d2a1 commit 1a600eb

File tree

1 file changed

+7
-10
lines changed
  • library/alloc/src/collections/btree

1 file changed

+7
-10
lines changed

library/alloc/src/collections/btree/node.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -861,17 +861,14 @@ impl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge
861861
let kv = unsafe { Handle::new_kv(self.node, self.idx) };
862862
(InsertResult::Fit(kv), ptr)
863863
} else {
864-
let middle = unsafe { Handle::new_kv(self.node, B) };
864+
let middle = unsafe { Handle::new_kv(self.node, B - 1) };
865865
let (mut left, k, v, mut right) = middle.split();
866-
let ptr = if self.idx <= B {
866+
let ptr = if self.idx < B {
867867
unsafe { Handle::new_edge(left.reborrow_mut(), self.idx).insert_fit(key, val) }
868868
} else {
869869
unsafe {
870-
Handle::new_edge(
871-
right.as_mut().cast_unchecked::<marker::Leaf>(),
872-
self.idx - (B + 1),
873-
)
874-
.insert_fit(key, val)
870+
Handle::new_edge(right.as_mut().cast_unchecked::<marker::Leaf>(), self.idx - B)
871+
.insert_fit(key, val)
875872
}
876873
};
877874
(InsertResult::Split(SplitResult { left: left.forget_type(), k, v, right }), ptr)
@@ -934,17 +931,17 @@ impl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::
934931
let kv = unsafe { Handle::new_kv(self.node, self.idx) };
935932
InsertResult::Fit(kv)
936933
} else {
937-
let middle = unsafe { Handle::new_kv(self.node, B) };
934+
let middle = unsafe { Handle::new_kv(self.node, B - 1) };
938935
let (mut left, k, v, mut right) = middle.split();
939-
if self.idx <= B {
936+
if self.idx < B {
940937
unsafe {
941938
Handle::new_edge(left.reborrow_mut(), self.idx).insert_fit(key, val, edge);
942939
}
943940
} else {
944941
unsafe {
945942
Handle::new_edge(
946943
right.as_mut().cast_unchecked::<marker::Internal>(),
947-
self.idx - (B + 1),
944+
self.idx - B,
948945
)
949946
.insert_fit(key, val, edge);
950947
}

0 commit comments

Comments
 (0)