ndarray_parallel/
into_traits.rs

1
2use rayon::iter::ParallelIterator;
3
4pub trait NdarrayIntoParallelIterator {
5    type Iter: ParallelIterator<Item=Self::Item>;
6    type Item: Send;
7    fn into_par_iter(self) -> Self::Iter;
8}
9
10pub trait NdarrayIntoParallelRefIterator<'x> {
11    type Iter: ParallelIterator<Item=Self::Item>;
12    type Item: Send + 'x;
13    fn par_iter(&'x self) -> Self::Iter;
14}
15
16pub trait NdarrayIntoParallelRefMutIterator<'x> {
17    type Iter: ParallelIterator<Item=Self::Item>;
18    type Item: Send + 'x;
19    fn par_iter_mut(&'x mut self) -> Self::Iter;
20}
21
22impl<'data, I: 'data + ?Sized> NdarrayIntoParallelRefIterator<'data> for I
23    where &'data I: NdarrayIntoParallelIterator
24{
25    type Iter = <&'data I as NdarrayIntoParallelIterator>::Iter;
26    type Item = <&'data I as NdarrayIntoParallelIterator>::Item;
27
28    fn par_iter(&'data self) -> Self::Iter {
29        self.into_par_iter()
30    }
31}
32
33impl<'data, I: 'data + ?Sized> NdarrayIntoParallelRefMutIterator<'data> for I
34    where &'data mut I: NdarrayIntoParallelIterator
35{
36    type Iter = <&'data mut I as NdarrayIntoParallelIterator>::Iter;
37    type Item = <&'data mut I as NdarrayIntoParallelIterator>::Item;
38
39    fn par_iter_mut(&'data mut self) -> Self::Iter {
40        self.into_par_iter()
41    }
42}