use super::CowVec;
pub struct CowVecIter<'a, T> {
pub(super) vec: &'a CowVec<T>,
pub(super) position: usize,
}
impl<'a, T> Iterator for CowVecIter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
if self.position < self.vec.len() {
let item = self.vec.get(self.position);
self.position += 1;
item
} else {
None
}
}
fn size_hint(&self) -> (usize, Option<usize>) {
let remaining = self.vec.len() - self.position;
(remaining, Some(remaining))
}
}
impl<T> ExactSizeIterator for CowVecIter<'_, T> {}
impl<'a, T> IntoIterator for &'a CowVec<T> {
type Item = &'a T;
type IntoIter = CowVecIter<'a, T>;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}