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 45 46 47 48 49
use number_traits::{Num, Signed}; #[inline] pub fn set<'a, T: Copy + Num>(out: &'a mut [T; 4], x: T, y: T, z: T, w: T) -> &'a mut [T; 4] { out[0] = x; out[1] = y; out[2] = z; out[3] = w; out } #[test] fn test_set() { let mut v = [0, 0, 0, 0]; set(&mut v, 1, 2, 3, 4); assert!(v == [1, 2, 3, 4]); } #[inline] pub fn zero<'a, 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, T: Copy + Num>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::zero(), T::zero(), T::zero(), T::one()) } #[inline] pub fn up<'a, T: Copy + Num>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::zero(), T::zero(), T::one(), T::one()) } #[inline] pub fn down<'a, T: Copy + Signed>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::zero(), T::zero(), -T::one(), T::one()) } #[inline] pub fn forward<'a, T: Copy + Num>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::zero(), T::one(), T::one(), T::one()) } #[inline] pub fn back<'a, T: Copy + Signed>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::zero(), -T::one(), T::zero(), T::one()) } #[inline] pub fn right<'a, T: Copy + Num>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, T::one(), T::zero(), T::one(), T::one()) } #[inline] pub fn left<'a, T: Copy + Signed>(out: &'a mut [T; 4]) -> &'a mut [T; 4] { set(out, -T::one(), T::zero(), T::one(), T::one()) }