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 {}