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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
use core::ops::Mul; use crate::Vec2; /// ``` /// use gfxmath_vec2::Vec2; /// /// let mut a = Vec2::<f32>::new(1.5, 2.5); /// let b = Vec2::<f32>::new(4.0, 2.0); /// let c = &a * &b; /// /// a.x = 2.0; /// /// assert_eq!( 6.0, c.x); /// assert_eq!( 5.0, c.y); /// /// let c = a * b; /// /// assert_eq!( 8.0, c.x); /// assert_eq!( 5.0, c.y); /// ``` #[opimps::impl_ops(Mul)] #[inline] fn mul<T>(self: Vec2<T>, rhs: Vec2<T>) -> Vec2<T> where T: Mul<Output = T> + Copy { Vec2 { x: self.x * rhs.x, y: self.y * rhs.y } } /// Scalar multiplication with vector /// /// ``` /// use gfxmath_vec2::Vec2; /// /// let a = Vec2::<f32>::new(0.5, 2.5); /// let b = Vec2::from(a * 2.0); /// /// assert_eq!( 1.0, b.x); /// assert_eq!( 5.0, b.y); /// ``` #[opimps::impl_ops_rprim(Mul)] #[inline] fn mul<T>(self: Vec2<T>, rhs: T) -> Vec2<T> where T: Mul<Output = T> + Copy { Vec2 { x: self.x * rhs, y: self.y * rhs} } /// Scalar multiplication with vector /// /// ``` /// use gfxmath_vec2::Vec2; /// /// let a = Vec2::<f32>::new(0.5, 2.5); /// let b = 2.0 * a; /// /// assert_eq!( 1.0, b.x); /// assert_eq!( 5.0, b.y); /// ``` #[opimps::impl_ops_lprim(Mul)] #[inline] fn mul(self: f32, rhs: Vec2<f32>) -> Vec2<f32> { Vec2 { x: self * rhs.x, y: self * rhs.y } } /// Scalar multiplication with vector /// /// ``` /// use gfxmath_vec2::Vec2; /// /// let a = Vec2::<f64>::new(0.5, 2.5); /// let b = 2.0 * a; /// /// assert_eq!( 1.0, b.x); /// assert_eq!( 5.0, b.y); /// ``` #[opimps::impl_ops_lprim(Mul)] #[inline] fn mul(self: f64, rhs: Vec2<f64>) -> Vec2<f64> { Vec2 { x: self * rhs.x, y: self * rhs.y } } /// Scalar multiplication with vector /// /// ``` /// use gfxmath_vec2::Vec2; /// /// let a = Vec2::<i32>::new(5, 2); /// let b = 2 * a; /// /// assert_eq!( 10, b.x); /// assert_eq!( 4, b.y); /// ``` #[opimps::impl_ops_lprim(Mul)] #[inline] fn mul(self: i32, rhs: Vec2<i32>) -> Vec2<i32> { Vec2 { x: self * rhs.x, y: self * rhs.y } } /// Scalar multiplication with vector /// /// ``` /// use gfxmath_vec2::Vec2; /// /// let a = Vec2::<i64>::new(5, 2); /// let b = 2 * a; /// /// assert_eq!( 10, b.x); /// assert_eq!( 4, b.y); /// ``` #[opimps::impl_ops_lprim(Mul)] #[inline] fn mul(self: i64, rhs: Vec2<i64>) -> Vec2<i64> { Vec2 { x: self * rhs.x, y: self * rhs.y } }