use super::{OrdSet, ZST};
use crate::ord::map::IntoIter as Inner;
use core::iter::FusedIterator;
pub struct IntoIter<T, const N: usize> {
inner: Inner<T, ZST, N>,
}
impl<T, const N: usize> IntoIter<T, N> {
pub(super) fn new(set: OrdSet<T, N>) -> Self {
Self {
inner: set.inner.into_iter(),
}
}
}
impl<T, const N: usize> Iterator for IntoIter<T, N> {
type Item = T;
fn next(&mut self) -> Option<Self::Item> {
self.inner.next().map(|(k, _)| k)
}
fn size_hint(&self) -> (usize, Option<usize>) {
self.inner.size_hint()
}
}
impl<T, const N: usize> DoubleEndedIterator for IntoIter<T, N> {
fn next_back(&mut self) -> Option<Self::Item> {
self.inner.next_back().map(|(k, _)| k)
}
}
impl<T, const N: usize> ExactSizeIterator for IntoIter<T, N> {}
impl<T, const N: usize> FusedIterator for IntoIter<T, N> {}