1 | // Take a look at the license at the top of the repository in the LICENSE file. |
2 | |
3 | cfg_if! { |
4 | if #[cfg(all( |
5 | feature = "multithread" , |
6 | not(feature = "unknown-ci" ), |
7 | not(all(target_os = "macos" , feature = "apple-sandbox" )), |
8 | ))] { |
9 | /// Converts the value into a parallel iterator if the `multithread` feature is enabled. |
10 | /// Uses the `rayon::iter::IntoParallelIterator` trait. |
11 | #[cfg(all( |
12 | feature = "multithread" , |
13 | not(feature = "unknown-ci" ), |
14 | not(all(target_os = "macos" , feature = "apple-sandbox" )), |
15 | ))] |
16 | #[allow(dead_code)] |
17 | pub(crate) fn into_iter<T>(val: T) -> T::Iter |
18 | where |
19 | T: rayon::iter::IntoParallelIterator, |
20 | { |
21 | val.into_par_iter() |
22 | } |
23 | |
24 | /// Converts the value into a parallel mutable iterator if the `multithread` feature is |
25 | /// enabled. Uses the `rayon::iter::IntoParallelRefMutIterator` trait. |
26 | #[cfg(feature = "component" )] |
27 | pub(crate) fn into_iter_mut<'a, T>( |
28 | val: &'a mut T, |
29 | ) -> <T as rayon::iter::IntoParallelRefMutIterator<'a>>::Iter |
30 | where |
31 | T: rayon::iter::IntoParallelRefMutIterator<'a> + ?Sized, |
32 | { |
33 | val.par_iter_mut() |
34 | } |
35 | } else { |
36 | /// Converts the value into a sequential iterator if the `multithread` feature is disabled. |
37 | /// Uses the `std::iter::IntoIterator` trait. |
38 | #[allow (dead_code)] |
39 | pub(crate) fn into_iter<T>(val: T) -> T::IntoIter |
40 | where |
41 | T: IntoIterator, |
42 | { |
43 | val.into_iter() |
44 | } |
45 | |
46 | // In the multithreaded version of `into_iter_mut` above, the `&mut` on the argument is |
47 | // indicating the parallel iterator is an exclusive reference. In the non-multithreaded |
48 | // case, the `&mut` is already part of `T` and specifying it will result in the argument |
49 | // being `&mut &mut T`. |
50 | |
51 | /// Converts the value into a sequential mutable iterator if the `multithread` feature is |
52 | /// disabled. Uses the `std::iter::IntoIterator` trait. |
53 | #[cfg (feature = "component" )] |
54 | pub(crate) fn into_iter_mut<T>(val: T) -> T::IntoIter |
55 | where |
56 | T: IntoIterator, |
57 | { |
58 | val.into_iter() |
59 | } |
60 | } |
61 | } |
62 | |