diff options
| author | C <DeveloperC@protonmail.com> | 2020-12-05 01:21:51 +0000 |
|---|---|---|
| committer | C <DeveloperC@protonmail.com> | 2020-12-29 14:03:30 +0000 |
| commit | a3f3fc5aedc9636ea580d8241746e06db6031270 (patch) | |
| tree | c02fdad89da26f96e47514ade8684e030090fde1 /library/alloc/src/vec/mod.rs | |
| parent | a2f4bc0d181f6aaee7b43fc37e7f16bd400d6b2c (diff) | |
| download | rust-a3f3fc5aedc9636ea580d8241746e06db6031270.tar.gz rust-a3f3fc5aedc9636ea580d8241746e06db6031270.zip | |
refactor: moved SetLenOnDrop to set_len_on_drop
Diffstat (limited to 'library/alloc/src/vec/mod.rs')
| -rw-r--r-- | library/alloc/src/vec/mod.rs | 33 |
1 files changed, 4 insertions, 29 deletions
diff --git a/library/alloc/src/vec/mod.rs b/library/alloc/src/vec/mod.rs index ae1736d8d3c..62ca5b950ce 100644 --- a/library/alloc/src/vec/mod.rs +++ b/library/alloc/src/vec/mod.rs @@ -109,6 +109,10 @@ use self::spec_from_elem::SpecFromElem; mod spec_from_elem; +use self::set_len_on_drop::SetLenOnDrop; + +mod set_len_on_drop; + /// A contiguous growable array type, written `Vec<T>` but pronounced 'vector'. /// /// # Examples @@ -1911,35 +1915,6 @@ impl<T, A: Allocator> Vec<T, A> { } } -// Set the length of the vec when the `SetLenOnDrop` value goes out of scope. -// -// The idea is: The length field in SetLenOnDrop is a local variable -// that the optimizer will see does not alias with any stores through the Vec's data -// pointer. This is a workaround for alias analysis issue #32155 -struct SetLenOnDrop<'a> { - len: &'a mut usize, - local_len: usize, -} - -impl<'a> SetLenOnDrop<'a> { - #[inline] - fn new(len: &'a mut usize) -> Self { - SetLenOnDrop { local_len: *len, len } - } - - #[inline] - fn increment_len(&mut self, increment: usize) { - self.local_len += increment; - } -} - -impl Drop for SetLenOnDrop<'_> { - #[inline] - fn drop(&mut self) { - *self.len = self.local_len; - } -} - impl<T: PartialEq, A: Allocator> Vec<T, A> { /// Removes consecutive repeated elements in the vector according to the /// [`PartialEq`] trait implementation. |
