Trait ParallelizableCollection

Source
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 elements T.

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§

Source

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 elements T.

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.

Implementors§