moirai_iter/parallel/
split.rs1use super::ParallelIterator;
2
3#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
5pub enum Either<L, R> {
6 Left(L),
8 Right(R),
10}
11
12pub(in crate::parallel) fn partition_map<I, A, B, P, L, R>(iterator: I, predicate: P) -> (A, B)
13where
14 I: ParallelIterator,
15 A: Default + Extend<L> + Send,
16 B: Default + Extend<R> + Send,
17 P: Fn(I::Item) -> Either<L, R> + Send + Sync + Clone,
18 L: Send,
19 R: Send,
20{
21 let mut left = A::default();
28 let mut right = B::default();
29
30 iterator.seq_fold((), |(), item| match predicate(item) {
31 Either::Left(value) => left.extend(std::iter::once(value)),
32 Either::Right(value) => right.extend(std::iter::once(value)),
33 });
34
35 (left, right)
36}