1 use std::ops::Range; 2 3 pub trait ParallelIterator: Iterator {} 4 5 impl<T: Iterator> ParallelIterator for T {} 6 7 pub trait IntoParallelIterator { 8 type Item; 9 type Iter: Iterator<Item = Self::Item> + ParallelIterator; 10 into_par_iter(self) -> Self::Iter11 fn into_par_iter(self) -> Self::Iter; 12 } 13 14 impl IntoParallelIterator for Range<usize> { 15 type Item = usize; 16 type Iter = Range<usize>; 17 into_par_iter(self) -> Self::Iter18 fn into_par_iter(self) -> Self::Iter { 19 self 20 } 21 } 22 23 pub trait ParallelExtend<T> { par_extend<I>(&mut self, par_iter: I) where I: IntoIterator<Item = T>24 fn par_extend<I>(&mut self, par_iter: I) 25 where 26 I: IntoIterator<Item = T>; 27 } 28 29 impl<T> ParallelExtend<T> for Vec<T> { par_extend<I>(&mut self, par_iter: I) where I: IntoIterator<Item = T>,30 fn par_extend<I>(&mut self, par_iter: I) 31 where 32 I: IntoIterator<Item = T>, 33 { 34 self.extend(par_iter); 35 } 36 } 37