orx_concurrent_vec/common_traits/
into_iter.rs1use crate::{ConcurrentElement, ConcurrentVec};
2use core::marker::PhantomData;
3use orx_fixed_vec::IntoConcurrentPinnedVec;
4
5impl<T, P> IntoIterator for ConcurrentVec<T, P>
6where
7 P: IntoConcurrentPinnedVec<ConcurrentElement<T>>,
8{
9 type Item = T;
10
11 type IntoIter = ElementValuesIter<T, P>;
12
13 fn into_iter(self) -> Self::IntoIter {
14 let x = self.into_inner();
15 let y: P::IntoIter = x.into_iter();
16 ElementValuesIter {
17 iter: y,
18 phantom: PhantomData,
19 }
20 }
21}
22
23pub struct ElementValuesIter<T, P>
42where
43 P: IntoConcurrentPinnedVec<ConcurrentElement<T>>,
44{
45 iter: P::IntoIter,
46 phantom: PhantomData<T>,
47}
48
49impl<T, P> Iterator for ElementValuesIter<T, P>
50where
51 P: IntoConcurrentPinnedVec<ConcurrentElement<T>>,
52{
53 type Item = T;
54
55 fn next(&mut self) -> Option<Self::Item> {
56 self.iter.next().map(|e| e.0.unwrap())
57 }
58}