diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-07-07 14:21:59 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-07 14:21:59 +0200 |
| commit | 94d07befe79251e2a8637e46c5505d1ca58ae74f (patch) | |
| tree | 411160fd90d1ce3b401052f5725c7801a43c0bee | |
| parent | 35a1ca043ec63f2d744367f4329afa00f98a5420 (diff) | |
| parent | 23e5468a09b7cfcb62f69dc18bb1f49c5e69b2b5 (diff) | |
| download | rust-94d07befe79251e2a8637e46c5505d1ca58ae74f.tar.gz rust-94d07befe79251e2a8637e46c5505d1ca58ae74f.zip | |
Rollup merge of #127189 - GrigorenkoPV:linkedlist-cursor-list, r=Nilstrieb
LinkedList's Cursor: method to get a ref to the cursor's list We're already providing `.back()` & `.front()`, for which we hold onto a reference to the parent list, so why not share it? Useful for when you got `LinkedList` -> `CursorMut` -> `Cursor` and cannot take another ref to the list, even though you should be able to. This seems to be completely safe & sound. The name is, of course, bikesheddable.
| -rw-r--r-- | library/alloc/src/collections/linked_list.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/library/alloc/src/collections/linked_list.rs b/library/alloc/src/collections/linked_list.rs index 01510a61405..077483a174b 100644 --- a/library/alloc/src/collections/linked_list.rs +++ b/library/alloc/src/collections/linked_list.rs @@ -1495,6 +1495,14 @@ impl<'a, T, A: Allocator> Cursor<'a, T, A> { pub fn back(&self) -> Option<&'a T> { self.list.back() } + + /// Provides a reference to the cursor's parent list. + #[must_use] + #[inline(always)] + #[unstable(feature = "linked_list_cursors", issue = "58533")] + pub fn as_list(&self) -> &'a LinkedList<T, A> { + self.list + } } impl<'a, T, A: Allocator> CursorMut<'a, T, A> { @@ -1605,6 +1613,18 @@ impl<'a, T, A: Allocator> CursorMut<'a, T, A> { pub fn as_cursor(&self) -> Cursor<'_, T, A> { Cursor { list: self.list, current: self.current, index: self.index } } + + /// Provides a read-only reference to the cursor's parent list. + /// + /// The lifetime of the returned reference is bound to that of the + /// `CursorMut`, which means it cannot outlive the `CursorMut` and that the + /// `CursorMut` is frozen for the lifetime of the reference. + #[must_use] + #[inline(always)] + #[unstable(feature = "linked_list_cursors", issue = "58533")] + pub fn as_list(&self) -> &LinkedList<T, A> { + self.list + } } // Now the list editing operations |
