diff options
| author | Stein Somers <git@steinsomers.be> | 2021-02-15 14:17:03 +0100 |
|---|---|---|
| committer | Stein Somers <git@steinsomers.be> | 2021-02-23 11:39:03 +0100 |
| commit | 794561c3917de0f050eae5c9f708e1c295a1e326 (patch) | |
| tree | c4f8537d5ff154b993e8c93c87791eaccf8766f5 /library/alloc/src/collections/btree | |
| parent | a4e595db8f12f9ee926256745d757004b850703f (diff) | |
| download | rust-794561c3917de0f050eae5c9f708e1c295a1e326.tar.gz rust-794561c3917de0f050eae5c9f708e1c295a1e326.zip | |
BTree: no longer define impossible casts
Diffstat (limited to 'library/alloc/src/collections/btree')
| -rw-r--r-- | library/alloc/src/collections/btree/node.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/library/alloc/src/collections/btree/node.rs b/library/alloc/src/collections/btree/node.rs index 4fc32305f1e..dc99f33da19 100644 --- a/library/alloc/src/collections/btree/node.rs +++ b/library/alloc/src/collections/btree/node.rs @@ -461,7 +461,7 @@ impl<K, V> NodeRef<marker::Dying, K, V, marker::LeafOrInternal> { } } -impl<'a, K, V, Type> NodeRef<marker::Mut<'a>, K, V, Type> { +impl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> { /// Unsafely asserts to the compiler the static information that this node is a `Leaf`. unsafe fn cast_to_leaf_unchecked(self) -> NodeRef<marker::Mut<'a>, K, V, marker::Leaf> { debug_assert!(self.height == 0); @@ -473,7 +473,9 @@ impl<'a, K, V, Type> NodeRef<marker::Mut<'a>, K, V, Type> { debug_assert!(self.height > 0); NodeRef { height: self.height, node: self.node, _marker: PhantomData } } +} +impl<'a, K, V, Type> NodeRef<marker::Mut<'a>, K, V, Type> { /// Temporarily takes out another, mutable reference to the same node. Beware, as /// this method is very dangerous, doubly so since it may not immediately appear /// dangerous. @@ -761,15 +763,17 @@ impl<BorrowType, K, V, NodeType, HandleType> } } -impl<'a, K, V, NodeType, HandleType> Handle<NodeRef<marker::Mut<'a>, K, V, NodeType>, HandleType> { +impl<'a, K, V, Type> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, Type> { /// Unsafely asserts to the compiler the static information that the handle's node is a `Leaf`. pub unsafe fn cast_to_leaf_unchecked( self, - ) -> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, HandleType> { + ) -> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, Type> { let node = unsafe { self.node.cast_to_leaf_unchecked() }; Handle { node, idx: self.idx, _marker: PhantomData } } +} +impl<'a, K, V, NodeType, HandleType> Handle<NodeRef<marker::Mut<'a>, K, V, NodeType>, HandleType> { /// Temporarily takes out another, mutable handle on the same location. Beware, as /// this method is very dangerous, doubly so since it may not immediately appear /// dangerous. @@ -1519,15 +1523,13 @@ impl<BorrowType, K, V> Handle<NodeRef<BorrowType, K, V, marker::Internal>, marke } } -impl<BorrowType, K, V, HandleType> - Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, HandleType> -{ +impl<BorrowType, K, V, Type> Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, Type> { /// Checks whether the underlying node is an `Internal` node or a `Leaf` node. pub fn force( self, ) -> ForceResult< - Handle<NodeRef<BorrowType, K, V, marker::Leaf>, HandleType>, - Handle<NodeRef<BorrowType, K, V, marker::Internal>, HandleType>, + Handle<NodeRef<BorrowType, K, V, marker::Leaf>, Type>, + Handle<NodeRef<BorrowType, K, V, marker::Internal>, Type>, > { match self.node.force() { ForceResult::Leaf(node) => { |
