pub trait ParallelizableCollection: ConcurrentCollection {
// Provided method
fn par(&self) -> Par<<Self::Iterable<'_> as ConcurrentIterable>::Iter> { ... }
}
Expand description
A type implementing ParallelizableCollection
is a collection owning the elements such that
- if the elements are of type
T
, - non-consuming
par
method can be called multiple times to create parallel iterators; i.e.,ParIter
, yielding references to the elements&T
; and - consuming
into_par
method can be called once to create a parallel iterator yielding owned elementsT
.
This trait can be considered as the concurrent counterpart of the Collection
trait.
Note that every ConcurrentCollection
type automatically implements ParallelizableCollection
.
§Examples
use orx_parallel::*;
// Vec<T>: ParallelizableCollection<Item = T>
let vec = vec![1, 2, 3, 4];
// non-consuming iteration over references
assert_eq!(vec.par().sum(), 10);
assert_eq!(vec.par().min(), Some(&1));
assert_eq!(vec.par().max(), Some(&4));
// consuming iteration over owned values
assert_eq!(vec.into_par().max(), Some(4));
Provided Methods§
Sourcefn par(&self) -> Par<<Self::Iterable<'_> as ConcurrentIterable>::Iter>
fn par(&self) -> Par<<Self::Iterable<'_> as ConcurrentIterable>::Iter>
A type implementing ParallelizableCollection
is a collection owning the elements such that
- if the elements are of type
T
, - non-consuming
par
method can be called multiple times to create parallel iterators; i.e.,ParIter
, yielding references to the elements&T
; and - consuming
into_par
method can be called once to create a parallel iterator yielding owned elementsT
.
This trait can be considered as the concurrent counterpart of the Collection
trait.
Note that every ConcurrentCollection
type automatically implements ParallelizableCollection
.
§Examples
use orx_parallel::*;
// Vec<T>: ParallelizableCollection<Item = T>
let vec = vec![1, 2, 3, 4];
// non-consuming iteration over references
assert_eq!(vec.par().sum(), 10);
assert_eq!(vec.par().min(), Some(&1));
assert_eq!(vec.par().max(), Some(&4));
// consuming iteration over owned values
assert_eq!(vec.into_par().max(), Some(4));
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.