pub trait ParallelizableCollectionMut: ConcurrentCollectionMut + ParallelizableCollection {
// Provided method
fn par_mut(&mut self) -> impl ParIter<DefaultRunner, Item = &mut Self::Item> { ... }
}
Expand description
A type implementing ParallelizableCollectionMut
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 - non-consuming
par_mut
method can be called multiple times to create parallel iterators yielding mutable references to the elements&mut 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 CollectionMut
trait.
Note that every ConcurrentCollectionMut
type automatically implements ParallelizableCollectionMut
.
§Examples
use orx_parallel::*;
// Vec<T>: ParallelizableCollectionMut<Item = T>
let mut 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));
// non-consuming mutable iteration
vec.par_mut().filter(|x| **x >= 3).for_each(|x| *x += 10);
assert_eq!(&vec, &[1, 2, 13, 14]);
// consuming iteration over owned values
assert_eq!(vec.into_par().max(), Some(14));
Provided Methods§
Sourcefn par_mut(&mut self) -> impl ParIter<DefaultRunner, Item = &mut Self::Item>
fn par_mut(&mut self) -> impl ParIter<DefaultRunner, Item = &mut Self::Item>
Creates a parallel iterator over mutable references of the collection’s elements.
§Examples
use orx_parallel::*;
// Vec<T>: ParallelizableCollectionMut<Item = T>
let mut vec = vec![1, 2, 3, 4];
vec.par_mut().filter(|x| **x >= 3).for_each(|x| *x += 10);
assert_eq!(&vec, &[1, 2, 13, 14]);
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.