• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use alloc::collections::LinkedList;
2 use alloc::vec::Vec;
3 
4 use rayon::iter::{IntoParallelIterator, ParallelIterator};
5 
6 /// Helper for collecting parallel iterators to an intermediary
collect<I: IntoParallelIterator>(iter: I) -> (LinkedList<Vec<I::Item>>, usize)7 pub(super) fn collect<I: IntoParallelIterator>(iter: I) -> (LinkedList<Vec<I::Item>>, usize) {
8     let list = iter
9         .into_par_iter()
10         .fold(Vec::new, |mut vec, elem| {
11             vec.push(elem);
12             vec
13         })
14         .map(|vec| {
15             let mut list = LinkedList::new();
16             list.push_back(vec);
17             list
18         })
19         .reduce(LinkedList::new, |mut list1, mut list2| {
20             list1.append(&mut list2);
21             list1
22         });
23 
24     let len = list.iter().map(Vec::len).sum();
25     (list, len)
26 }
27