1use crate::{
2 ArrayStorage, Const, Matrix, Matrix2, Matrix2x3, Matrix2x4, Matrix3, Matrix3x2, Matrix3x4,
3 Matrix4, Matrix4x2, Matrix4x3, MatrixView2, MatrixView2x3, MatrixView2x4, MatrixView3,
4 MatrixView3x2, MatrixView3x4, MatrixView4, MatrixView4x2, MatrixView4x3, MatrixViewMut2,
5 MatrixViewMut2x3, MatrixViewMut2x4, MatrixViewMut3, MatrixViewMut3x2, MatrixViewMut3x4,
6 MatrixViewMut4, MatrixViewMut4x2, MatrixViewMut4x3, OVector, Point, Point2, Point3, Point4,
7 SMatrix, Scalar, Vector2, Vector3, Vector4, VectorView2, VectorView3, VectorView4,
8 VectorViewMut2, VectorViewMut3, VectorViewMut4,
9};
10use encase::{
11 matrix::{AsMutMatrixParts, AsRefMatrixParts, FromMatrixParts, MatrixScalar, impl_matrix},
12 vector::{AsMutVectorParts, AsRefVectorParts, FromVectorParts, VectorScalar, impl_vector},
13};
14
15impl_vector!(2, VectorView2<'_, T>);
16impl_vector!(2, VectorViewMut2<'_, T>);
17impl_vector!(2, Vector2<T>);
18
19impl_vector!(3, VectorView3<'_, T>);
20impl_vector!(3, VectorViewMut3<'_, T>);
21impl_vector!(3, Vector3<T>);
22
23impl_vector!(4, VectorView4<'_, T>);
24impl_vector!(4, VectorViewMut4<'_, T>);
25impl_vector!(4, Vector4<T>);
26
27impl_vector!(2, Point2<T>; (T: Scalar); using From);
28impl_vector!(3, Point3<T>; (T: Scalar); using From);
29impl_vector!(4, Point4<T>; (T: Scalar); using From);
30
31impl_matrix!(2, 2, MatrixView2<'_, T>);
32impl_matrix!(2, 2, MatrixViewMut2<'_, T>);
33impl_matrix!(2, 2, Matrix2<T>);
34
35impl_matrix!(3, 2, MatrixView2x3<'_, T>);
36impl_matrix!(4, 2, MatrixView2x4<'_, T>);
37impl_matrix!(2, 3, MatrixView3x2<'_, T>);
38impl_matrix!(3, 2, MatrixViewMut2x3<'_, T>);
39impl_matrix!(4, 2, MatrixViewMut2x4<'_, T>);
40impl_matrix!(2, 3, MatrixViewMut3x2<'_, T>);
41impl_matrix!(3, 2, Matrix2x3<T>);
42impl_matrix!(4, 2, Matrix2x4<T>);
43impl_matrix!(2, 3, Matrix3x2<T>);
44
45impl_matrix!(3, 3, MatrixView3<'_, T>);
46impl_matrix!(3, 3, MatrixViewMut3<'_, T>);
47impl_matrix!(3, 3, Matrix3<T>);
48
49impl_matrix!(4, 3, MatrixView3x4<'_, T>);
50impl_matrix!(2, 4, MatrixView4x2<'_, T>);
51impl_matrix!(3, 4, MatrixView4x3<'_, T>);
52impl_matrix!(4, 3, MatrixViewMut3x4<'_, T>);
53impl_matrix!(2, 4, MatrixViewMut4x2<'_, T>);
54impl_matrix!(3, 4, MatrixViewMut4x3<'_, T>);
55impl_matrix!(4, 3, Matrix3x4<T>);
56impl_matrix!(2, 4, Matrix4x2<T>);
57impl_matrix!(3, 4, Matrix4x3<T>);
58
59impl_matrix!(4, 4, MatrixView4<'_, T>);
60impl_matrix!(4, 4, MatrixViewMut4<'_, T>);
61impl_matrix!(4, 4, Matrix4<T>);
62
63impl<T: VectorScalar, S, const N: usize> AsRefVectorParts<T, N> for Matrix<T, Const<N>, Const<1>, S>
64where
65 Self: AsRef<[T; N]>,
66{
67 fn as_ref_parts(&self) -> &[T; N] {
68 self.as_ref()
69 }
70}
71
72impl<T: VectorScalar, S, const N: usize> AsMutVectorParts<T, N> for Matrix<T, Const<N>, Const<1>, S>
73where
74 Self: AsMut<[T; N]>,
75{
76 fn as_mut_parts(&mut self) -> &mut [T; N] {
77 self.as_mut()
78 }
79}
80
81impl<T: VectorScalar, const N: usize> FromVectorParts<T, N> for SMatrix<T, N, 1> {
82 fn from_parts(parts: [T; N]) -> Self {
83 Self::from_array_storage(ArrayStorage([parts]))
84 }
85}
86
87impl<T: VectorScalar + Scalar, const N: usize> AsRefVectorParts<T, N> for Point<T, N>
88where
89 OVector<T, Const<N>>: AsRef<[T; N]>,
90{
91 fn as_ref_parts(&self) -> &[T; N] {
92 self.coords.as_ref()
93 }
94}
95
96impl<T: VectorScalar + Scalar, const N: usize> AsMutVectorParts<T, N> for Point<T, N>
97where
98 OVector<T, Const<N>>: AsMut<[T; N]>,
99{
100 fn as_mut_parts(&mut self) -> &mut [T; N] {
101 self.coords.as_mut()
102 }
103}
104
105impl<T: MatrixScalar, S, const C: usize, const R: usize> AsRefMatrixParts<T, C, R>
106 for Matrix<T, Const<R>, Const<C>, S>
107where
108 Self: AsRef<[[T; R]; C]>,
109{
110 fn as_ref_parts(&self) -> &[[T; R]; C] {
111 self.as_ref()
112 }
113}
114
115impl<T: MatrixScalar, S, const C: usize, const R: usize> AsMutMatrixParts<T, C, R>
116 for Matrix<T, Const<R>, Const<C>, S>
117where
118 Self: AsMut<[[T; R]; C]>,
119{
120 fn as_mut_parts(&mut self) -> &mut [[T; R]; C] {
121 self.as_mut()
122 }
123}
124
125impl<T: MatrixScalar, const C: usize, const R: usize> FromMatrixParts<T, C, R>
126 for SMatrix<T, R, C>
127{
128 fn from_parts(parts: [[T; R]; C]) -> Self {
129 Self::from_array_storage(ArrayStorage(parts))
130 }
131}