From ef753fc6ed54807ac2864706abd38eb01cbca5aa Mon Sep 17 00:00:00 2001 From: Stein Somers Date: Tue, 14 Jul 2020 11:32:50 +0200 Subject: BTreeMap: better distinguish the root holder from the root node --- library/alloc/src/collections/btree/node.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'library/alloc/src/collections/btree/node.rs') diff --git a/library/alloc/src/collections/btree/node.rs b/library/alloc/src/collections/btree/node.rs index 4e52c16d20d..f70869148d5 100644 --- a/library/alloc/src/collections/btree/node.rs +++ b/library/alloc/src/collections/btree/node.rs @@ -163,7 +163,8 @@ impl Root { Root { node: BoxedNode::from_leaf(Box::new(unsafe { LeafNode::new() })), height: 0 } } - pub fn as_ref(&self) -> NodeRef, K, V, marker::LeafOrInternal> { + /// Borrows and returns an immutable reference to the node owned by the root. + pub fn node_as_ref(&self) -> NodeRef, K, V, marker::LeafOrInternal> { NodeRef { height: self.height, node: self.node.as_ptr(), @@ -172,7 +173,8 @@ impl Root { } } - pub fn as_mut(&mut self) -> NodeRef, K, V, marker::LeafOrInternal> { + /// Borrows and returns a mutable reference to the node owned by the root. + pub fn node_as_mut(&mut self) -> NodeRef, K, V, marker::LeafOrInternal> { NodeRef { height: self.height, node: self.node.as_ptr(), @@ -226,12 +228,12 @@ impl Root { self.node = unsafe { BoxedNode::from_ptr( - self.as_mut().cast_unchecked::().first_edge().descend().node, + self.node_as_mut().cast_unchecked::().first_edge().descend().node, ) }; self.height -= 1; unsafe { - (*self.as_mut().as_leaf_mut()).parent = ptr::null(); + (*self.node_as_mut().as_leaf_mut()).parent = ptr::null(); } unsafe { @@ -616,7 +618,7 @@ impl<'a, K, V> NodeRef, K, V, marker::LeafOrInternal> { let edge = ptr::read(internal.as_internal().edges.get_unchecked(idx + 1).as_ptr()); let mut new_root = Root { node: edge, height: internal.height - 1 }; - (*new_root.as_mut().as_leaf_mut()).parent = ptr::null(); + (*new_root.node_as_mut().as_leaf_mut()).parent = ptr::null(); Some(new_root) } }; @@ -648,7 +650,7 @@ impl<'a, K, V> NodeRef, K, V, marker::LeafOrInternal> { ); let mut new_root = Root { node: edge, height: internal.height - 1 }; - (*new_root.as_mut().as_leaf_mut()).parent = ptr::null(); + (*new_root.node_as_mut().as_leaf_mut()).parent = ptr::null(); for i in 0..old_len { Handle::new_edge(internal.reborrow_mut(), i).correct_parent_link(); @@ -868,7 +870,7 @@ impl<'a, K, V> Handle, K, V, marker::Leaf>, marker::Edge } else { unsafe { Handle::new_edge( - right.as_mut().cast_unchecked::(), + right.node_as_mut().cast_unchecked::(), self.idx - (B + 1), ) .insert_fit(key, val) @@ -943,7 +945,7 @@ impl<'a, K, V> Handle, K, V, marker::Internal>, marker:: } else { unsafe { Handle::new_edge( - right.as_mut().cast_unchecked::(), + right.node_as_mut().cast_unchecked::(), self.idx - (B + 1), ) .insert_fit(key, val, edge); @@ -1117,7 +1119,7 @@ impl<'a, K, V> Handle, K, V, marker::Internal>, marker:: let mut new_root = Root { node: BoxedNode::from_internal(new_node), height }; for i in 0..(new_len + 1) { - Handle::new_edge(new_root.as_mut().cast_unchecked(), i).correct_parent_link(); + Handle::new_edge(new_root.node_as_mut().cast_unchecked(), i).correct_parent_link(); } (self.node, k, v, new_root) -- cgit 1.4.1-3-g733a5