| use core::fmt; |
| use core::iter::{FusedIterator, TrustedLen}; |
| |
| use super::VecDeque; |
| |
| /// An owning iterator over the elements of a `VecDeque`. |
| /// |
| /// This `struct` is created by the [`into_iter`] method on [`VecDeque`] |
| /// (provided by the `IntoIterator` trait). See its documentation for more. |
| /// |
| /// [`into_iter`]: VecDeque::into_iter |
| #[derive(Clone)] |
| #[stable(feature = "rust1", since = "1.0.0")] |
| pub struct IntoIter<T> { |
| pub(crate) inner: VecDeque<T>, |
| } |
| |
| #[stable(feature = "collection_debug", since = "1.17.0")] |
| impl<T: fmt::Debug> fmt::Debug for IntoIter<T> { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| f.debug_tuple("IntoIter").field(&self.inner).finish() |
| } |
| } |
| |
| #[stable(feature = "rust1", since = "1.0.0")] |
| impl<T> Iterator for IntoIter<T> { |
| type Item = T; |
| |
| #[inline] |
| fn next(&mut self) -> Option<T> { |
| self.inner.pop_front() |
| } |
| |
| #[inline] |
| fn size_hint(&self) -> (usize, Option<usize>) { |
| let len = self.inner.len(); |
| (len, Some(len)) |
| } |
| } |
| |
| #[stable(feature = "rust1", since = "1.0.0")] |
| impl<T> DoubleEndedIterator for IntoIter<T> { |
| #[inline] |
| fn next_back(&mut self) -> Option<T> { |
| self.inner.pop_back() |
| } |
| } |
| |
| #[stable(feature = "rust1", since = "1.0.0")] |
| impl<T> ExactSizeIterator for IntoIter<T> { |
| fn is_empty(&self) -> bool { |
| self.inner.is_empty() |
| } |
| } |
| |
| #[stable(feature = "fused", since = "1.26.0")] |
| impl<T> FusedIterator for IntoIter<T> {} |
| |
| #[unstable(feature = "trusted_len", issue = "37572")] |
| unsafe impl<T> TrustedLen for IntoIter<T> {} |