diff options
| author | Michael Goulet <michael@errs.io> | 2022-05-30 15:57:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-30 15:57:27 -0700 |
| commit | 3c0b9d50ae43eb4c13390fcc363e7cc4d4d661d3 (patch) | |
| tree | de5f0e96c5df617b55b0cb1b0c4104d1075ee906 | |
| parent | c35035cefc709abddabfb28ecc6a326458d46ce2 (diff) | |
| parent | cf30ac847decca2caaaaf8a2591552bce380c14d (diff) | |
| download | rust-3c0b9d50ae43eb4c13390fcc363e7cc4d4d661d3.tar.gz rust-3c0b9d50ae43eb4c13390fcc363e7cc4d4d661d3.zip | |
Rollup merge of #89685 - DeveloperC286:iter_fields_to_private, r=oli-obk
refactor: VecDeques Iter fields to private Made the fields of VecDeque's Iter private by creating a Iter::new(...) function to create a new instance of Iter and migrating usage to use Iter::new(...).
| -rw-r--r-- | library/alloc/src/collections/vec_deque/iter.rs | 12 | ||||
| -rw-r--r-- | library/alloc/src/collections/vec_deque/mod.rs | 21 |
2 files changed, 17 insertions, 16 deletions
diff --git a/library/alloc/src/collections/vec_deque/iter.rs b/library/alloc/src/collections/vec_deque/iter.rs index 19198ab3aa1..e696d7ed636 100644 --- a/library/alloc/src/collections/vec_deque/iter.rs +++ b/library/alloc/src/collections/vec_deque/iter.rs @@ -13,9 +13,15 @@ use super::{count, wrap_index, RingSlices}; /// [`iter`]: super::VecDeque::iter #[stable(feature = "rust1", since = "1.0.0")] pub struct Iter<'a, T: 'a> { - pub(crate) ring: &'a [MaybeUninit<T>], - pub(crate) tail: usize, - pub(crate) head: usize, + ring: &'a [MaybeUninit<T>], + tail: usize, + head: usize, +} + +impl<'a, T> Iter<'a, T> { + pub(super) fn new(ring: &'a [MaybeUninit<T>], tail: usize, head: usize) -> Self { + Iter { ring, tail, head } + } } #[stable(feature = "collection_debug", since = "1.17.0")] diff --git a/library/alloc/src/collections/vec_deque/mod.rs b/library/alloc/src/collections/vec_deque/mod.rs index 04900ead579..e28a94386c7 100644 --- a/library/alloc/src/collections/vec_deque/mod.rs +++ b/library/alloc/src/collections/vec_deque/mod.rs @@ -1013,7 +1013,7 @@ impl<T, A: Allocator> VecDeque<T, A> { /// ``` #[stable(feature = "rust1", since = "1.0.0")] pub fn iter(&self) -> Iter<'_, T> { - Iter { tail: self.tail, head: self.head, ring: unsafe { self.buffer_as_slice() } } + Iter::new(unsafe { self.buffer_as_slice() }, self.tail, self.head) } /// Returns a front-to-back iterator that returns mutable references. @@ -1192,12 +1192,8 @@ impl<T, A: Allocator> VecDeque<T, A> { R: RangeBounds<usize>, { let (tail, head) = self.range_tail_head(range); - Iter { - tail, - head, - // The shared reference we have in &self is maintained in the '_ of Iter. - ring: unsafe { self.buffer_as_slice() }, - } + // The shared reference we have in &self is maintained in the '_ of Iter. + Iter::new(unsafe { self.buffer_as_slice() }, tail, head) } /// Creates an iterator that covers the specified mutable range in the deque. @@ -1313,16 +1309,15 @@ impl<T, A: Allocator> VecDeque<T, A> { self.head = drain_tail; let deque = NonNull::from(&mut *self); - let iter = Iter { - tail: drain_tail, - head: drain_head, + unsafe { // Crucially, we only create shared references from `self` here and read from // it. We do not write to `self` nor reborrow to a mutable reference. // Hence the raw pointer we created above, for `deque`, remains valid. - ring: unsafe { self.buffer_as_slice() }, - }; + let ring = self.buffer_as_slice(); + let iter = Iter::new(ring, drain_tail, drain_head); - unsafe { Drain::new(drain_head, head, iter, deque) } + Drain::new(drain_head, head, iter, deque) + } } /// Clears the deque, removing all values. |
