orx_parallel/collect_into/
par_collect_into.rs1use crate::Params;
2use crate::generic_values::runner_results::{Fallibility, Infallible};
3use crate::generic_values::{TransformableValues, Values};
4use crate::runner::ParallelRunner;
5use crate::using::UParCollectIntoCore;
6use orx_concurrent_iter::ConcurrentIter;
7use orx_iterable::Collection;
8use orx_pinned_vec::IntoConcurrentPinnedVec;
9
10pub trait ParCollectIntoCore<O>: Collection<Item = O> {
11 type BridgePinnedVec: IntoConcurrentPinnedVec<O>;
12
13 fn empty(iter_len: Option<usize>) -> Self;
14
15 fn m_collect_into<R, I, M1>(self, orchestrator: R, params: Params, iter: I, map1: M1) -> Self
16 where
17 R: ParallelRunner,
18 I: ConcurrentIter,
19 M1: Fn(I::Item) -> O + Sync;
20
21 fn x_collect_into<R, I, Vo, X1>(
22 self,
23 orchestrator: R,
24 params: Params,
25 iter: I,
26 xap1: X1,
27 ) -> Self
28 where
29 R: ParallelRunner,
30 I: ConcurrentIter,
31 Vo: TransformableValues<Item = O, Fallibility = Infallible>,
32 X1: Fn(I::Item) -> Vo + Sync;
33
34 fn x_try_collect_into<R, I, Vo, X1>(
35 self,
36 orchestrator: R,
37 params: Params,
38 iter: I,
39 xap1: X1,
40 ) -> Result<Self, <Vo::Fallibility as Fallibility>::Error>
41 where
42 R: ParallelRunner,
43 I: ConcurrentIter,
44 X1: Fn(I::Item) -> Vo + Sync,
45 Vo: Values<Item = O>,
46 Self: Sized;
47
48 #[cfg(test)]
51 fn length(&self) -> usize;
52
53 #[cfg(test)]
54 fn is_empty(&self) -> bool {
55 self.length() == 0
56 }
57
58 #[cfg(test)]
59 fn is_equal_to<'a>(&self, b: impl orx_iterable::Iterable<Item = &'a O>) -> bool
60 where
61 O: PartialEq + 'a,
62 {
63 let mut b = b.iter();
64 for x in self.iter() {
65 match b.next() {
66 Some(y) if x != y => return false,
67 None => return false,
68 _ => {}
69 }
70 }
71
72 b.next().is_none()
73 }
74
75 #[cfg(test)]
76 fn is_equal_to_ref(&self, b: impl orx_iterable::Iterable<Item = O>) -> bool
77 where
78 O: PartialEq,
79 {
80 let mut b = b.iter();
81 for x in self.iter() {
82 match b.next() {
83 Some(y) if x != &y => return false,
84 None => return false,
85 _ => {}
86 }
87 }
88
89 b.next().is_none()
90 }
91}
92
93pub trait ParCollectInto<O>: ParCollectIntoCore<O> + UParCollectIntoCore<O> {}
95
96impl<O, C> ParCollectInto<O> for C where C: ParCollectIntoCore<O> + UParCollectIntoCore<O> {}