| use core::fmt; |
| use core::iter::{FusedIterator, TrustedLen}; |
| |
| use crate::alloc::{Allocator, Global}; |
| |
| 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 |
| /// [`IntoIterator`]: core::iter::IntoIterator |
| #[derive(Clone)] |
| #[stable(feature = "rust1", since = "1.0.0")] |
| pub struct IntoIter< |
| T, |
| #[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global, |
| > { |
| inner: VecDeque<T, A>, |
| } |
| |
| impl<T, A: Allocator> IntoIter<T, A> { |
| pub(super) fn new(inner: VecDeque<T, A>) -> Self { |
| IntoIter { inner } |
| } |
| } |
| |
| #[stable(feature = "collection_debug", since = "1.17.0")] |
| impl<T: fmt::Debug, A: Allocator> fmt::Debug for IntoIter<T, A> { |
| 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, A: Allocator> Iterator for IntoIter<T, A> { |
| 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, A: Allocator> DoubleEndedIterator for IntoIter<T, A> { |
| #[inline] |
| fn next_back(&mut self) -> Option<T> { |
| self.inner.pop_back() |
| } |
| } |
| |
| #[stable(feature = "rust1", since = "1.0.0")] |
| impl<T, A: Allocator> ExactSizeIterator for IntoIter<T, A> { |
| fn is_empty(&self) -> bool { |
| self.inner.is_empty() |
| } |
| } |
| |
| #[stable(feature = "fused", since = "1.26.0")] |
| impl<T, A: Allocator> FusedIterator for IntoIter<T, A> {} |
| |
| #[unstable(feature = "trusted_len", issue = "37572")] |
| unsafe impl<T, A: Allocator> TrustedLen for IntoIter<T, A> {} |