Skip to content

Commit 184735a

Browse files
committed
BTreeMap: reuse BoxedNode instances directly instead of their contents
1 parent 5565241 commit 184735a

File tree

1 file changed

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

1 file changed

+3
-7
lines changed

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

+3-7
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,6 @@ impl<K, V> BoxedNode<K, V> {
128128
BoxedNode { ptr: Unique::from(&mut Box::leak(node).data) }
129129
}
130130

131-
unsafe fn from_ptr(ptr: NonNull<LeafNode<K, V>>) -> Self {
132-
BoxedNode { ptr: unsafe { Unique::new_unchecked(ptr.as_ptr()) } }
133-
}
134-
135131
fn as_ptr(&self) -> NonNull<LeafNode<K, V>> {
136132
NonNull::from(self.ptr)
137133
}
@@ -199,7 +195,7 @@ impl<K, V> Root<K, V> {
199195
/// and is the opposite of `pop_internal_level`.
200196
pub fn push_internal_level(&mut self) -> NodeRef<marker::Mut<'_>, K, V, marker::Internal> {
201197
let mut new_node = Box::new(unsafe { InternalNode::new() });
202-
new_node.edges[0].write(unsafe { BoxedNode::from_ptr(self.node.as_ptr()) });
198+
new_node.edges[0].write(unsafe { ptr::read(&mut self.node) });
203199

204200
self.node = BoxedNode::from_internal(new_node);
205201
self.height += 1;
@@ -225,8 +221,8 @@ impl<K, V> Root<K, V> {
225221

226222
let top = self.node.ptr;
227223

228-
let internal_node = unsafe { self.internal_node_as_mut() };
229-
self.node = unsafe { BoxedNode::from_ptr(internal_node.first_edge().descend().node) };
224+
let mut internal_node = unsafe { self.internal_node_as_mut() };
225+
self.node = unsafe { internal_node.as_internal_mut().edges[0].assume_init_read() };
230226
self.height -= 1;
231227
self.node_as_mut().as_leaf_mut().parent = None;
232228

0 commit comments

Comments
 (0)