Skip to main content

orx_parallel/into_parallel/
parallelizable.rs

1use crate::infallible::{ParIter, xap_variants::Id};
2use crate::runner::default_runner;
3use orx_concurrent_iter::ConcurrentIterable;
4
5/// Adds `.par()` to concurrent iterables.
6///
7/// Sequential counterpart: creating and using a regular iterator via `iter()` or `into_iter()`.
8pub trait Parallelizable: ConcurrentIterable {
9    /// Returns a parallel iterator over items of this iterable.
10    ///
11    /// # Example
12    ///
13    /// ```
14    /// use orx_parallel::*;
15    ///
16    /// let sum: usize = (0..10).par().sum();
17    /// assert_eq!(sum, 45);
18    /// ```
19    fn par(&self) -> ParIter<Self::Iter, Id<Self::Item>> {
20        ParIter::new(
21            self.con_iter(),
22            Id::new(),
23            default_runner(),
24            Default::default(),
25        )
26    }
27}
28
29impl<I> Parallelizable for I where I: ConcurrentIterable {}