[−][src]Trait rayon_croissant::ParallelIteratorExt
Extension methods for rayon's parallel iterators.
Provided methods
fn mapfold_reduce_into<'acc, Output, Accumulator, Mapfold, Init, Reduce>(
self,
accumulator: &'acc mut Accumulator,
mapfold: Mapfold,
init: Init,
reduce: Reduce
) -> MapfoldReduce<'acc, Accumulator, Self, Mapfold, Init, Reduce> where
Output: Send,
Accumulator: Send + 'acc,
Mapfold: Clone + Send + Fn(&mut Accumulator, Self::Item) -> Output,
Init: Clone + Send + Fn() -> Accumulator,
Reduce: Clone + Send + Fn(&mut Accumulator, Accumulator),
self,
accumulator: &'acc mut Accumulator,
mapfold: Mapfold,
init: Init,
reduce: Reduce
) -> MapfoldReduce<'acc, Accumulator, Self, Mapfold, Init, Reduce> where
Output: Send,
Accumulator: Send + 'acc,
Mapfold: Clone + Send + Fn(&mut Accumulator, Self::Item) -> Output,
Init: Clone + Send + Fn() -> Accumulator,
Reduce: Clone + Send + Fn(&mut Accumulator, Accumulator),
Applies mapfold
to each item of this iterator, producing a new iterator
with the Output
results, while folding and reducing each intermediate
Accumulator
to accumulator
.
Example
use rayon::prelude::*; use rayon_croissant::ParallelIteratorExt; let ingredients = &[ "baguette", "jambon", "beurre", "fromage", ]; let mut ingredients_indices_with_odd_length = vec![]; let ingredients_lengths = ingredients .par_iter() .enumerate() .mapfold_reduce_into( &mut ingredients_indices_with_odd_length, |acc, (index, item)| { let len = item.len(); if len % 2 == 1 { acc.push(index); } len }, Default::default, |left, mut right| left.append(&mut right), ) .collect::<Vec<_>>(); assert_eq!(ingredients_lengths, [8, 6, 6, 7]); assert_eq!(ingredients_indices_with_odd_length, [3]);
Implementors
impl<Input> ParallelIteratorExt for Input where
Input: ParallelIterator,
[src]
Input: ParallelIterator,