orx_concurrent_vec/common_traits/
into_iter.rsuse crate::{ConcurrentElement, ConcurrentVec};
use core::marker::PhantomData;
use orx_fixed_vec::IntoConcurrentPinnedVec;
impl<T, P> IntoIterator for ConcurrentVec<T, P>
where
P: IntoConcurrentPinnedVec<ConcurrentElement<T>>,
{
type Item = T;
type IntoIter = ElementValuesIter<T, P>;
fn into_iter(self) -> Self::IntoIter {
let x = self.into_inner();
let y: P::IntoIter = x.into_iter();
ElementValuesIter {
iter: y,
phantom: PhantomData,
}
}
}
pub struct ElementValuesIter<T, P>
where
P: IntoConcurrentPinnedVec<ConcurrentElement<T>>,
{
iter: P::IntoIter,
phantom: PhantomData<T>,
}
impl<T, P> Iterator for ElementValuesIter<T, P>
where
P: IntoConcurrentPinnedVec<ConcurrentElement<T>>,
{
type Item = T;
fn next(&mut self) -> Option<Self::Item> {
self.iter.next().map(|e| e.0.unwrap())
}
}