ndarray_parallel/
into_traits.rs1
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}