xref: /wasmtime-44.0.1/crates/wizer/src/rayoff.rs (revision 7981473f)
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