nalgebra/geometry/
point_simba.rs
1use simba::simd::SimdValue;
2
3use crate::base::{OVector, Scalar};
4
5use crate::geometry::Point;
6
7impl<T: Scalar + SimdValue, const D: usize> SimdValue for Point<T, D>
8where
9 T::Element: Scalar,
10{
11 type Element = Point<T::Element, D>;
12 type SimdBool = T::SimdBool;
13
14 #[inline]
15 fn lanes() -> usize {
16 T::lanes()
17 }
18
19 #[inline]
20 fn splat(val: Self::Element) -> Self {
21 OVector::splat(val.coords).into()
22 }
23
24 #[inline]
25 fn extract(&self, i: usize) -> Self::Element {
26 self.coords.extract(i).into()
27 }
28
29 #[inline]
30 unsafe fn extract_unchecked(&self, i: usize) -> Self::Element {
31 self.coords.extract_unchecked(i).into()
32 }
33
34 #[inline]
35 fn replace(&mut self, i: usize, val: Self::Element) {
36 self.coords.replace(i, val.coords)
37 }
38
39 #[inline]
40 unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element) {
41 self.coords.replace_unchecked(i, val.coords)
42 }
43
44 #[inline]
45 fn select(self, cond: Self::SimdBool, other: Self) -> Self {
46 self.coords.select(cond, other.coords).into()
47 }
48}