]> git.proxmox.com Git - rustc.git/blame - vendor/rustc-rayon/src/iter/for_each.rs
Merge tag 'debian/1.52.1+dfsg1-1_exp2' into proxmox/buster
[rustc.git] / vendor / rustc-rayon / src / iter / for_each.rs
CommitLineData
2c00a5a8 1use super::noop::*;
532ac7d7
XL
2use super::plumbing::*;
3use super::ParallelIterator;
2c00a5a8 4
e74abb32 5pub(super) fn for_each<I, F, T>(pi: I, op: &F)
532ac7d7
XL
6where
7 I: ParallelIterator<Item = T>,
8 F: Fn(T) + Sync,
9 T: Send,
2c00a5a8 10{
e74abb32 11 let consumer = ForEachConsumer { op };
2c00a5a8
XL
12 pi.drive_unindexed(consumer)
13}
14
6a06907d 15struct ForEachConsumer<'f, F> {
2c00a5a8
XL
16 op: &'f F,
17}
18
19impl<'f, F, T> Consumer<T> for ForEachConsumer<'f, F>
532ac7d7
XL
20where
21 F: Fn(T) + Sync,
2c00a5a8
XL
22{
23 type Folder = ForEachConsumer<'f, F>;
24 type Reducer = NoopReducer;
25 type Result = ();
26
27 fn split_at(self, _index: usize) -> (Self, Self, NoopReducer) {
28 (self.split_off_left(), self, NoopReducer)
29 }
30
31 fn into_folder(self) -> Self {
32 self
33 }
34
35 fn full(&self) -> bool {
36 false
37 }
38}
39
40impl<'f, F, T> Folder<T> for ForEachConsumer<'f, F>
532ac7d7
XL
41where
42 F: Fn(T) + Sync,
2c00a5a8
XL
43{
44 type Result = ();
45
46 fn consume(self, item: T) -> Self {
47 (self.op)(item);
48 self
49 }
50
532ac7d7
XL
51 fn consume_iter<I>(self, iter: I) -> Self
52 where
53 I: IntoIterator<Item = T>,
54 {
e74abb32 55 iter.into_iter().for_each(self.op);
2c00a5a8
XL
56 self
57 }
58
59 fn complete(self) {}
60
61 fn full(&self) -> bool {
62 false
63 }
64}
65
66impl<'f, F, T> UnindexedConsumer<T> for ForEachConsumer<'f, F>
532ac7d7
XL
67where
68 F: Fn(T) + Sync,
2c00a5a8
XL
69{
70 fn split_off_left(&self) -> Self {
71 ForEachConsumer { op: self.op }
72 }
73
74 fn to_reducer(&self) -> NoopReducer {
75 NoopReducer
76 }
77}