pub trait ParallelIteratorExt: ParallelIterator {
// Provided method
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) { ... }
}Expand description
Extension methods for rayon’s parallel iterators.
Provided Methods§
Sourcefn 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>
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>
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]);Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.