Skip to content

Commit 12c10e3

Browse files
committed
Auto merge of #73951 - pickfire:liballoc-intoiter, r=Mark-Simulacrum
Liballoc intoiter refactor
2 parents 9911160 + 5031523 commit 12c10e3

File tree

1 file changed

+25
-33
lines changed

1 file changed

+25
-33
lines changed

library/alloc/src/vec.rs

+25-33
Original file line numberDiff line numberDiff line change
@@ -2882,25 +2882,21 @@ impl<T> Iterator for IntoIter<T> {
28822882

28832883
#[inline]
28842884
fn next(&mut self) -> Option<T> {
2885-
unsafe {
2886-
if self.ptr as *const _ == self.end {
2887-
None
2888-
} else {
2889-
if mem::size_of::<T>() == 0 {
2890-
// purposefully don't use 'ptr.offset' because for
2891-
// vectors with 0-size elements this would return the
2892-
// same pointer.
2893-
self.ptr = arith_offset(self.ptr as *const i8, 1) as *mut T;
2894-
2895-
// Make up a value of this ZST.
2896-
Some(mem::zeroed())
2897-
} else {
2898-
let old = self.ptr;
2899-
self.ptr = self.ptr.offset(1);
2900-
2901-
Some(ptr::read(old))
2902-
}
2903-
}
2885+
if self.ptr as *const _ == self.end {
2886+
None
2887+
} else if mem::size_of::<T>() == 0 {
2888+
// purposefully don't use 'ptr.offset' because for
2889+
// vectors with 0-size elements this would return the
2890+
// same pointer.
2891+
self.ptr = unsafe { arith_offset(self.ptr as *const i8, 1) as *mut T };
2892+
2893+
// Make up a value of this ZST.
2894+
Some(unsafe { mem::zeroed() })
2895+
} else {
2896+
let old = self.ptr;
2897+
self.ptr = unsafe { self.ptr.offset(1) };
2898+
2899+
Some(unsafe { ptr::read(old) })
29042900
}
29052901
}
29062902

@@ -2935,22 +2931,18 @@ impl<T> Iterator for IntoIter<T> {
29352931
impl<T> DoubleEndedIterator for IntoIter<T> {
29362932
#[inline]
29372933
fn next_back(&mut self) -> Option<T> {
2938-
unsafe {
2939-
if self.end == self.ptr {
2940-
None
2941-
} else {
2942-
if mem::size_of::<T>() == 0 {
2943-
// See above for why 'ptr.offset' isn't used
2944-
self.end = arith_offset(self.end as *const i8, -1) as *mut T;
2934+
if self.end == self.ptr {
2935+
None
2936+
} else if mem::size_of::<T>() == 0 {
2937+
// See above for why 'ptr.offset' isn't used
2938+
self.end = unsafe { arith_offset(self.end as *const i8, -1) as *mut T };
29452939

2946-
// Make up a value of this ZST.
2947-
Some(mem::zeroed())
2948-
} else {
2949-
self.end = self.end.offset(-1);
2940+
// Make up a value of this ZST.
2941+
Some(unsafe { mem::zeroed() })
2942+
} else {
2943+
self.end = unsafe { self.end.offset(-1) };
29502944

2951-
Some(ptr::read(self.end))
2952-
}
2953-
}
2945+
Some(unsafe { ptr::read(self.end) })
29542946
}
29552947
}
29562948
}

0 commit comments

Comments
 (0)