diff options
| author | bors <bors@rust-lang.org> | 2020-09-11 23:52:03 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-09-11 23:52:03 +0000 |
| commit | 12c10e34a49385d329e15575027d0faa729986f3 (patch) | |
| tree | fff6501faa1df7a4c0509f930d4ea3340c8f695e | |
| parent | 99111606fcda4fdb0646e4f7ee0f6cbcb76fb84a (diff) | |
| parent | 50315238aa8ffae08f29b260aa36511e03b5e070 (diff) | |
| download | rust-12c10e34a49385d329e15575027d0faa729986f3.tar.gz rust-12c10e34a49385d329e15575027d0faa729986f3.zip | |
Auto merge of #73951 - pickfire:liballoc-intoiter, r=Mark-Simulacrum
Liballoc intoiter refactor
| -rw-r--r-- | library/alloc/src/vec.rs | 58 |
1 files changed, 25 insertions, 33 deletions
diff --git a/library/alloc/src/vec.rs b/library/alloc/src/vec.rs index eba7ffae22c..baa6c0919de 100644 --- a/library/alloc/src/vec.rs +++ b/library/alloc/src/vec.rs @@ -2882,25 +2882,21 @@ impl<T> Iterator for IntoIter<T> { #[inline] fn next(&mut self) -> Option<T> { - unsafe { - if self.ptr as *const _ == self.end { - None - } else { - if mem::size_of::<T>() == 0 { - // purposefully don't use 'ptr.offset' because for - // vectors with 0-size elements this would return the - // same pointer. - self.ptr = arith_offset(self.ptr as *const i8, 1) as *mut T; - - // Make up a value of this ZST. - Some(mem::zeroed()) - } else { - let old = self.ptr; - self.ptr = self.ptr.offset(1); - - Some(ptr::read(old)) - } - } + if self.ptr as *const _ == self.end { + None + } else if mem::size_of::<T>() == 0 { + // purposefully don't use 'ptr.offset' because for + // vectors with 0-size elements this would return the + // same pointer. + self.ptr = unsafe { arith_offset(self.ptr as *const i8, 1) as *mut T }; + + // Make up a value of this ZST. + Some(unsafe { mem::zeroed() }) + } else { + let old = self.ptr; + self.ptr = unsafe { self.ptr.offset(1) }; + + Some(unsafe { ptr::read(old) }) } } @@ -2935,22 +2931,18 @@ impl<T> Iterator for IntoIter<T> { impl<T> DoubleEndedIterator for IntoIter<T> { #[inline] fn next_back(&mut self) -> Option<T> { - unsafe { - if self.end == self.ptr { - None - } else { - if mem::size_of::<T>() == 0 { - // See above for why 'ptr.offset' isn't used - self.end = arith_offset(self.end as *const i8, -1) as *mut T; + if self.end == self.ptr { + None + } else if mem::size_of::<T>() == 0 { + // See above for why 'ptr.offset' isn't used + self.end = unsafe { arith_offset(self.end as *const i8, -1) as *mut T }; - // Make up a value of this ZST. - Some(mem::zeroed()) - } else { - self.end = self.end.offset(-1); + // Make up a value of this ZST. + Some(unsafe { mem::zeroed() }) + } else { + self.end = unsafe { self.end.offset(-1) }; - Some(ptr::read(self.end)) - } - } + Some(unsafe { ptr::read(self.end) }) } } } |
