Auto merge of #73951 - pickfire:liballoc-intoiter, r=Mark-Simulacrum
Liballoc intoiter refactor
This commit is contained in:
commit
12c10e34a4
@ -2882,25 +2882,21 @@ impl<T> Iterator for IntoIter<T> {
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> Option<T> {
|
fn next(&mut self) -> Option<T> {
|
||||||
unsafe {
|
if self.ptr as *const _ == self.end {
|
||||||
if self.ptr as *const _ == self.end {
|
None
|
||||||
None
|
} else if mem::size_of::<T>() == 0 {
|
||||||
} else {
|
// purposefully don't use 'ptr.offset' because for
|
||||||
if mem::size_of::<T>() == 0 {
|
// vectors with 0-size elements this would return the
|
||||||
// purposefully don't use 'ptr.offset' because for
|
// same pointer.
|
||||||
// vectors with 0-size elements this would return the
|
self.ptr = unsafe { arith_offset(self.ptr as *const i8, 1) as *mut T };
|
||||||
// same pointer.
|
|
||||||
self.ptr = arith_offset(self.ptr as *const i8, 1) as *mut T;
|
|
||||||
|
|
||||||
// Make up a value of this ZST.
|
// Make up a value of this ZST.
|
||||||
Some(mem::zeroed())
|
Some(unsafe { mem::zeroed() })
|
||||||
} else {
|
} else {
|
||||||
let old = self.ptr;
|
let old = self.ptr;
|
||||||
self.ptr = self.ptr.offset(1);
|
self.ptr = unsafe { self.ptr.offset(1) };
|
||||||
|
|
||||||
Some(ptr::read(old))
|
Some(unsafe { ptr::read(old) })
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2935,22 +2931,18 @@ impl<T> Iterator for IntoIter<T> {
|
|||||||
impl<T> DoubleEndedIterator for IntoIter<T> {
|
impl<T> DoubleEndedIterator for IntoIter<T> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next_back(&mut self) -> Option<T> {
|
fn next_back(&mut self) -> Option<T> {
|
||||||
unsafe {
|
if self.end == self.ptr {
|
||||||
if self.end == self.ptr {
|
None
|
||||||
None
|
} else if mem::size_of::<T>() == 0 {
|
||||||
} else {
|
// See above for why 'ptr.offset' isn't used
|
||||||
if mem::size_of::<T>() == 0 {
|
self.end = unsafe { arith_offset(self.end as *const i8, -1) as *mut T };
|
||||||
// See above for why 'ptr.offset' isn't used
|
|
||||||
self.end = arith_offset(self.end as *const i8, -1) as *mut T;
|
|
||||||
|
|
||||||
// Make up a value of this ZST.
|
// Make up a value of this ZST.
|
||||||
Some(mem::zeroed())
|
Some(unsafe { mem::zeroed() })
|
||||||
} else {
|
} else {
|
||||||
self.end = self.end.offset(-1);
|
self.end = unsafe { self.end.offset(-1) };
|
||||||
|
|
||||||
Some(ptr::read(self.end))
|
Some(unsafe { ptr::read(self.end) })
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user