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)7pub(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