makepad_vector/internal_iter/
internal_iterator.rs1use crate::internal_iter::FromInternalIterator;
2
3pub trait InternalIterator {
9 type Item;
10
11 fn for_each<F>(self, f: &mut F) -> bool
16 where
17 F: FnMut(Self::Item) -> bool;
18
19 fn collect<F>(self) -> F
21 where
22 Self: Sized,
23 F: FromInternalIterator<Self::Item>,
24 {
25 FromInternalIterator::from_internal_iter(self)
26 }
27
28 fn map<R, F>(self, f: F) -> Map<Self, F>
30 where
31 Self: Sized,
32 F: FnMut(Self::Item) -> R,
33 {
34 Map {
35 internal_iter: self,
36 f,
37 }
38 }
39}
40
41impl<I> InternalIterator for I
42where
43 I: Iterator,
44{
45 type Item = I::Item;
46
47 fn for_each<F>(self, f: &mut F) -> bool
48 where
49 F: FnMut(Self::Item) -> bool,
50 {
51 for item in self {
52 if !f(item) {
53 return false;
54 }
55 }
56 true
57 }
58}
59
60#[derive(Clone, Debug)]
62pub struct Map<I, F> {
63 internal_iter: I,
64 f: F,
65}
66
67impl<R, I, F> InternalIterator for Map<I, F>
68where
69 I: InternalIterator,
70 F: FnMut(I::Item) -> R,
71{
72 type Item = R;
73
74 fn for_each<G>(mut self, g: &mut G) -> bool
75 where
76 G: FnMut(Self::Item) -> bool,
77 {
78 self.internal_iter.for_each({
79 let f = &mut self.f;
80 &mut move |item| g((f)(item))
81 })
82 }
83}