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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use core::ops::MulAssign;
use crate::Vec2;

///
/// ```
/// use gfxmath_vec2::Vec2;
/// 
/// let mut v1 = Vec2::new(1.0, 3.0);
/// let v2 = Vec2::new(2.0, 5.0);
/// v1 *= v2;
/// 
/// assert_eq!(2.0, v1.x);
/// assert_eq!(15.0, v1.y);
/// 
/// let mut v1 = Vec2::new(9.0, 5.0);
/// let v2 = Vec2::new(3.5, 2.0);
/// 
/// *(&mut v1) *= v2;
/// 
/// assert_eq!(31.5, v1.x);
/// assert_eq!(10.0, v1.y);
/// ```
#[opimps::impl_ops_assign(MulAssign)]
#[inline]
fn mul_assign<T>(self: Vec2<T>, rhs: Vec2<T>) where T: MulAssign<T> + Copy {
    self.x *= rhs.x;
    self.y *= rhs.y;
}

///
/// ```
/// use gfxmath_vec2::Vec2;
/// 
/// let mut v1 = Vec2::new(1.0, 3.0);
/// let v2 = (2.0, 5.0);
/// v1 *= v2;
/// 
/// assert_eq!(2.0, v1.x);
/// assert_eq!(15.0, v1.y);
/// 
/// let mut v1 = Vec2::new(9.0, 5.0);
/// let v2 = (3.5, 2.0);
/// 
/// *(&mut v1) *= v2;
/// 
/// assert_eq!(31.5, v1.x);
/// assert_eq!(10.0, v1.y);
/// ```
impl <T> MulAssign<(T, T)> for Vec2<T> where T: MulAssign {
    #[inline]
    fn mul_assign(&mut self, rhs: (T, T)) {
        self.x *= rhs.0;
        self.y *= rhs.1;
    }
}

///
/// ```
/// use gfxmath_vec2::Vec2;
///  
/// let mut v1 = Vec2::new(9.0, 5.0);
/// 
/// v1 *= 2.0;
/// 
/// assert_eq!(18.0, v1.x);
/// assert_eq!(10.0, v1.y);
/// ```
#[opimps::impl_op_assign(MulAssign)]
#[inline]
fn mul_assign<T>(self: Vec2<T>, rhs: T) where T: MulAssign<T> + Copy {
    self.x *= rhs;
    self.y *= rhs;
}