[][src]Trait rayon_croissant::ParallelIteratorExt

pub trait ParallelIteratorExt: ParallelIterator {
    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)
, { ... } }

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

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]);
Loading content...

Implementors

impl<Input> ParallelIteratorExt for Input where
    Input: ParallelIterator
[src]

Loading content...