gfxmath_vec3/impls/sub/subassign.rs
1use core::ops::SubAssign;
2use crate::Vec3;
3
4///
5/// ```
6/// use gfxmath_vec3::Vec3;
7///
8/// let mut a = Vec3::<f32>::new(0.5, 2.5, -2.5);
9/// let mut b = Vec3::<f32>::new(1.5, 2.5, 2.0);
10///
11/// a -= &b;
12///
13/// assert_eq!(-1.0, a.x);
14/// assert_eq!( 0.0, a.y);
15/// assert_eq!(-4.5, a.z);
16///
17/// a -= b;
18/// assert_eq!(-2.5, a.x);
19/// assert_eq!(-2.5, a.y);
20/// assert_eq!(-6.5, a.z);
21/// ```
22#[opimps::impl_ops_assign(SubAssign)]
23#[inline]
24fn sub_assign<T>(self: Vec3<T>, rhs: Vec3<T>) where T: SubAssign<T> + Copy {
25 let l = self.as_mut_slice();
26 let r = rhs.as_slice();
27
28 l[0] -= r[0];
29 l[1] -= r[1];
30 l[2] -= r[2];
31}
32
33///
34/// ```
35/// use gfxmath_vec3::Vec3;
36///
37/// let mut a = Vec3::<f32>::new(0.5, 2.5, -2.5);
38///
39/// a -= -1.0;
40///
41/// assert_eq!( 1.5, a.x);
42/// assert_eq!( 3.5, a.y);
43/// assert_eq!(-1.5, a.z);
44/// ```
45#[opimps::impl_op_assign(SubAssign)]
46#[inline]
47fn sub_assign<T>(self: Vec3<T>, rhs: T) where T: SubAssign<T> + Copy {
48 let l = self.as_mut_slice();
49
50 l[0] -= rhs;
51 l[1] -= rhs;
52 l[2] -= rhs;
53}