Trait ParallelIteratorExt

Source
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§

Source

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),

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.

Implementors§

Source§

impl<Input> ParallelIteratorExt for Input
where Input: ParallelIterator,