1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
use number_traits::Num; #[inline] pub fn set<'a, 'b, T: Copy + Num>( out: &'a mut [T; 4], m11: T, m12: T, m21: T, m22: T, ) -> &'a mut [T; 4] { out[0] = m11; out[1] = m21; out[2] = m12; out[3] = m22; out } #[test] fn test_set() { let mut v = [0, 0, 0, 0]; set(&mut v, 1, 2, 3, 4); assert!(v == [1, 3, 2, 4]); } #[inline] pub fn zero<'a, 'b, T: Copy + Num>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::zero(), T::zero(), T::zero(), T::zero()) } #[inline] pub fn identity<'a, 'b, T: Copy + Num>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::one(), T::zero(), T::zero(), T::one()) } #[inline] pub fn from_mat32<'a, 'b, T: Copy + Num>(out: &'a mut [T; 4], m: &'b [T; 6]) -> &'a mut [T; 4] { set(out, m[0], m[2], m[1], m[3]) } #[inline] pub fn from_mat3<'a, 'b, T: Copy + Num>(out: &'a mut [T; 4], m: &'b [T; 9]) -> &'a mut [T; 4] { set(out, m[0], m[3], m[1], m[4]) } #[inline] pub fn from_mat4<'a, 'b, T: Copy + Num>(out: &'a mut [T; 4], m: &'b [T; 16]) -> &'a mut [T; 4] { set(out, m[0], m[4], m[1], m[5]) }