Skip to content

Commit 772bf20

Browse files
calebzulawskiworkingjubilee
authored andcommitted
Hide select impl in sealed trait
1 parent 7c2d295 commit 772bf20

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

crates/core_simd/src/select.rs

+14-16
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,49 @@ use crate::simd::intrinsics;
22
use crate::simd::{LaneCount, Mask, MaskElement, Simd, SimdElement, SupportedLaneCount};
33

44
mod sealed {
5-
pub trait Sealed {}
5+
pub trait Sealed<Mask> {
6+
fn select(mask: Mask, true_values: Self, false_values: Self) -> Self;
7+
}
68
}
79
use sealed::Sealed;
810

911
/// 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> {}
1413

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>
1615
where
1716
T: SimdElement,
1817
LaneCount<LANES>: SupportedLaneCount,
1918
{
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+
}
2023
}
2124

2225
impl<T, const LANES: usize> Select<Mask<T::Mask, LANES>> for Simd<T, LANES>
2326
where
2427
T: SimdElement,
2528
LaneCount<LANES>: SupportedLaneCount,
2629
{
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-
}
3130
}
3231

33-
impl<T, const LANES: usize> Sealed for Mask<T, LANES>
32+
impl<T, const LANES: usize> Sealed<Self> for Mask<T, LANES>
3433
where
3534
T: MaskElement,
3635
LaneCount<LANES>: SupportedLaneCount,
3736
{
37+
#[inline]
38+
fn select(mask: Self, true_values: Self, false_values: Self) -> Self {
39+
mask & true_values | !mask & false_values
40+
}
3841
}
3942

4043
impl<T, const LANES: usize> Select<Self> for Mask<T, LANES>
4144
where
4245
T: MaskElement,
4346
LaneCount<LANES>: SupportedLaneCount,
4447
{
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-
}
5048
}
5149

5250
impl<T, const LANES: usize> Mask<T, LANES>

0 commit comments

Comments
 (0)