1 // Copyright (c) 2023 Huawei Device Co., Ltd.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 //     http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 use super::{IntoParIter, ParIter, ParSplit};
15 
16 impl<T> ParSplit for Vec<T> {
len(&self) -> usize17     fn len(&self) -> usize {
18         <Vec<T>>::len(self)
19     }
20 
reduce(mut self, len: usize) -> Self21     fn reduce(mut self, len: usize) -> Self {
22         self.truncate(len);
23         self
24     }
25 
split(mut self) -> (Self, Option<Self>)26     fn split(mut self) -> (Self, Option<Self>) {
27         let idx = self.len() >> 1;
28         let right = self.split_off(idx);
29         if right.is_empty() {
30             (self, None)
31         } else {
32             (self, Some(right))
33         }
34     }
35 }
36 
37 impl<'a, T> IntoParIter for &'a Vec<T> {
38     type Data = &'a [T];
into_par_iter(self) -> ParIter<&'a [T]>39     fn into_par_iter(self) -> ParIter<&'a [T]> {
40         <&[T]>::into_par_iter(self)
41     }
42 }
43 
44 impl<'a, T> IntoParIter for &'a mut Vec<T> {
45     type Data = &'a mut [T];
into_par_iter(self) -> ParIter<&'a mut [T]>46     fn into_par_iter(self) -> ParIter<&'a mut [T]> {
47         <&mut [T]>::into_par_iter(self)
48     }
49 }
50