@@ -2,51 +2,49 @@ use crate::simd::intrinsics;
2
2
use crate :: simd:: { LaneCount , Mask , MaskElement , Simd , SimdElement , SupportedLaneCount } ;
3
3
4
4
mod sealed {
5
- pub trait Sealed { }
5
+ pub trait Sealed < Mask > {
6
+ fn select ( mask : Mask , true_values : Self , false_values : Self ) -> Self ;
7
+ }
6
8
}
7
9
use sealed:: Sealed ;
8
10
9
11
/// Supporting trait for vector `select` function
10
- pub trait Select < Mask > : Sealed {
11
- #[ doc( hidden) ]
12
- fn select ( mask : Mask , true_values : Self , false_values : Self ) -> Self ;
13
- }
12
+ pub trait Select < Mask > : Sealed < Mask > { }
14
13
15
- impl < T , const LANES : usize > Sealed for Simd < T , LANES >
14
+ impl < T , const LANES : usize > Sealed < Mask < T :: Mask , LANES > > for Simd < T , LANES >
16
15
where
17
16
T : SimdElement ,
18
17
LaneCount < LANES > : SupportedLaneCount ,
19
18
{
19
+ #[ inline]
20
+ fn select ( mask : Mask < T :: Mask , LANES > , true_values : Self , false_values : Self ) -> Self {
21
+ unsafe { intrinsics:: simd_select ( mask. to_int ( ) , true_values, false_values) }
22
+ }
20
23
}
21
24
22
25
impl < T , const LANES : usize > Select < Mask < T :: Mask , LANES > > for Simd < T , LANES >
23
26
where
24
27
T : SimdElement ,
25
28
LaneCount < LANES > : SupportedLaneCount ,
26
29
{
27
- #[ inline]
28
- fn select ( mask : Mask < T :: Mask , LANES > , true_values : Self , false_values : Self ) -> Self {
29
- unsafe { intrinsics:: simd_select ( mask. to_int ( ) , true_values, false_values) }
30
- }
31
30
}
32
31
33
- impl < T , const LANES : usize > Sealed for Mask < T , LANES >
32
+ impl < T , const LANES : usize > Sealed < Self > for Mask < T , LANES >
34
33
where
35
34
T : MaskElement ,
36
35
LaneCount < LANES > : SupportedLaneCount ,
37
36
{
37
+ #[ inline]
38
+ fn select ( mask : Self , true_values : Self , false_values : Self ) -> Self {
39
+ mask & true_values | !mask & false_values
40
+ }
38
41
}
39
42
40
43
impl < T , const LANES : usize > Select < Self > for Mask < T , LANES >
41
44
where
42
45
T : MaskElement ,
43
46
LaneCount < LANES > : SupportedLaneCount ,
44
47
{
45
- #[ doc( hidden) ]
46
- #[ inline]
47
- fn select ( mask : Self , true_values : Self , false_values : Self ) -> Self {
48
- mask & true_values | !mask & false_values
49
- }
50
48
}
51
49
52
50
impl < T , const LANES : usize > Mask < T , LANES >
0 commit comments