Thanks to visit codestin.com
Credit goes to docs.rs

orx_concurrent_vec/common_traits/
into_iter.rs

1use 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
23/// A consuming iterator yielding values of the vector.
24///
25/// It can be created by calling `into_iter` on the ConcurrentVec.
26///
27/// # Examples
28///
29/// ```
30/// use orx_concurrent_vec::*;
31///
32/// let vec = ConcurrentVec::new();
33/// vec.extend(['a', 'b', 'c']);
34///
35/// let mut iter = vec.into_iter();
36/// assert_eq!(iter.next(), Some('a'));
37/// assert_eq!(iter.next(), Some('b'));
38/// assert_eq!(iter.next(), Some('c'));
39/// assert_eq!(iter.next(), None);
40/// ```
41pub 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}