//! Defines the `IntoIter` owned iterator for arrays.
+use super::LengthAtMost32;
use crate::{
fmt,
iter::{ExactSizeIterator, FusedIterator, TrustedLen},
ops::Range,
ptr,
};
-use super::LengthAtMost32;
-
/// A by-value [array] iterator.
///
alive: Range<usize>,
}
-impl<T, const N: usize> IntoIter<T, {N}>
+impl<T, const N: usize> IntoIter<T, { N }>
where
[T; N]: LengthAtMost32,
{
data
};
- Self {
- data,
- alive: 0..N,
- }
+ Self { data, alive: 0..N }
}
/// Returns an immutable slice of all elements that have not been yielded
// SAFETY: This transmute is safe. As mentioned in `new`, `MaybeUninit` retains
// the size and alignment of `T`. Furthermore, we know that all
// elements within `alive` are properly initialized.
- unsafe {
- mem::transmute::<&[MaybeUninit<T>], &[T]>(slice)
- }
+ unsafe { mem::transmute::<&[MaybeUninit<T>], &[T]>(slice) }
}
/// Returns a mutable slice of all elements that have not been yielded yet.
// SAFETY: This transmute is safe. As mentioned in `new`, `MaybeUninit` retains
// the size and alignment of `T`. Furthermore, we know that all
// elements within `alive` are properly initialized.
- unsafe {
- mem::transmute::<&mut [MaybeUninit<T>], &mut [T]>(slice)
- }
+ unsafe { mem::transmute::<&mut [MaybeUninit<T>], &mut [T]>(slice) }
}
}
-
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-impl<T, const N: usize> Iterator for IntoIter<T, {N}>
+impl<T, const N: usize> Iterator for IntoIter<T, { N }>
where
[T; N]: LengthAtMost32,
{
}
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-impl<T, const N: usize> DoubleEndedIterator for IntoIter<T, {N}>
+impl<T, const N: usize> DoubleEndedIterator for IntoIter<T, { N }>
where
[T; N]: LengthAtMost32,
{
}
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-impl<T, const N: usize> Drop for IntoIter<T, {N}>
+impl<T, const N: usize> Drop for IntoIter<T, { N }>
where
[T; N]: LengthAtMost32,
{
// SAFETY: This is safe: `as_mut_slice` returns exactly the sub-slice
// of elements that have not been moved out yet and that remain
// to be dropped.
- unsafe {
- ptr::drop_in_place(self.as_mut_slice())
- }
+ unsafe { ptr::drop_in_place(self.as_mut_slice()) }
}
}
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-impl<T, const N: usize> ExactSizeIterator for IntoIter<T, {N}>
+impl<T, const N: usize> ExactSizeIterator for IntoIter<T, { N }>
where
[T; N]: LengthAtMost32,
{
}
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-impl<T, const N: usize> FusedIterator for IntoIter<T, {N}>
-where
- [T; N]: LengthAtMost32,
-{}
+impl<T, const N: usize> FusedIterator for IntoIter<T, { N }> where [T; N]: LengthAtMost32 {}
// The iterator indeed reports the correct length. The number of "alive"
// elements (that will still be yielded) is the length of the range `alive`.
// This range is decremented in length in either `next` or `next_back`. It is
// always decremented by 1 in those methods, but only if `Some(_)` is returned.
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-unsafe impl<T, const N: usize> TrustedLen for IntoIter<T, {N}>
-where
- [T; N]: LengthAtMost32,
-{}
+unsafe impl<T, const N: usize> TrustedLen for IntoIter<T, { N }> where [T; N]: LengthAtMost32 {}
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-impl<T: Clone, const N: usize> Clone for IntoIter<T, {N}>
+impl<T: Clone, const N: usize> Clone for IntoIter<T, { N }>
where
[T; N]: LengthAtMost32,
{
new_data.get_unchecked_mut(idx).write(clone);
}
- Self {
- data: new_data,
- alive: self.alive.clone(),
- }
+ Self { data: new_data, alive: self.alive.clone() }
}
}
}
#[stable(feature = "array_value_iter_impls", since = "1.40.0")]
-impl<T: fmt::Debug, const N: usize> fmt::Debug for IntoIter<T, {N}>
+impl<T: fmt::Debug, const N: usize> fmt::Debug for IntoIter<T, { N }>
where
[T; N]: LengthAtMost32,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// Only print the elements that were not yielded yet: we cannot
// access the yielded elements anymore.
- f.debug_tuple("IntoIter")
- .field(&self.as_slice())
- .finish()
+ f.debug_tuple("IntoIter").field(&self.as_slice()).finish()
}
}