gfxmath_vec3/impls/mul/mul.rs
1use crate::Vec3;
2use core::ops::Mul;
3
4/// ```
5/// use gfxmath_vec3::Vec3;
6///
7/// let mut a = Vec3::<f32>::new(1.5, 2.5, -2.0);
8/// let b = Vec3::<f32>::new(4.0, 2.0, 4.0);
9/// let c = Vec3::from(&a * &b);
10///
11/// a.x = 2.0;
12///
13/// assert_eq!( 6.0, c.x);
14/// assert_eq!( 5.0, c.y);
15/// assert_eq!(-8.0, c.z);
16///
17/// let c = Vec3::from(a * b);
18///
19/// assert_eq!( 8.0, c.x);
20/// assert_eq!( 5.0, c.y);
21/// assert_eq!(-8.0, c.z);
22/// ```
23#[opimps::impl_ops(Mul)]
24#[inline]
25fn mul<T>(self: Vec3<T>, rhs: Vec3<T>) -> Vec3<T> where T: Mul<Output = T> + Copy {
26 let l = self.as_slice();
27 let r = rhs.as_slice();
28 Vec3::new(
29 l[0] * r[0],
30 l[1] * r[1],
31 l[2] * r[2],
32 )
33}
34
35/// Scalar multiplication with vector
36///
37/// ```
38/// use gfxmath_vec3::Vec3;
39///
40/// let a = Vec3::<f32>::new(0.5, 2.5, -2.5);
41/// let b = Vec3::from(a * 2.0);
42///
43/// assert_eq!( 1.0, b.x);
44/// assert_eq!( 5.0, b.y);
45/// assert_eq!(-5.0, b.z);
46/// ```
47#[opimps::impl_ops_rprim(Mul)]
48#[inline]
49fn mul<T>(self: Vec3<T>, rhs: T) -> Vec3<T> where T: Mul<Output = T> + Copy {
50 return Vec3::new(
51 self.x * rhs,
52 self.y * rhs,
53 self.z * rhs
54 );
55}
56
57/// Scalar multiplication with vector
58///
59/// ```
60/// use gfxmath_vec3::Vec3;
61///
62/// let a = Vec3::<f32>::new(0.5, 2.5, -2.5);
63/// let b = Vec3::from(2.0 * a);
64///
65/// assert_eq!( 1.0, b.x);
66/// assert_eq!( 5.0, b.y);
67/// assert_eq!(-5.0, b.z);
68/// ```
69#[opimps::impl_ops_lprim(Mul)]
70fn mul(self: f32, rhs: Vec3<f32>) -> Vec3<f32> {
71 return Vec3::new(
72 self * rhs.x,
73 self * rhs.y,
74 self * rhs.z
75 );
76}
77
78/// Scalar multiplication with vector
79///
80/// ```
81/// use gfxmath_vec3::Vec3;
82///
83/// let a = Vec3::<f64>::new(0.5, 2.5, -2.5);
84/// let b = Vec3::from(2.0 * a);
85///
86/// assert_eq!( 1.0, b.x);
87/// assert_eq!( 5.0, b.y);
88/// assert_eq!(-5.0, b.z);
89/// ```
90#[opimps::impl_ops_lprim(Mul)]
91fn mul(self: f64, rhs: Vec3<f64>) -> Vec3<f64> {
92 return Vec3::new(
93 self * rhs.x,
94 self * rhs.y,
95 self * rhs.z
96 );
97}
98
99/// Scalar multiplication with vector
100///
101/// ```
102/// use gfxmath_vec3::Vec3;
103///
104/// let a = Vec3::<i32>::new(5, 2, -2);
105/// let b = Vec3::from(2 * a);
106///
107/// assert_eq!( 10, b.x);
108/// assert_eq!( 4, b.y);
109/// assert_eq!(-4, b.z);
110/// ```
111#[opimps::impl_ops_lprim(Mul)]
112fn mul(self: i32, rhs: Vec3<i32>) -> Vec3<i32> {
113 return Vec3::new(
114 self * rhs.x,
115 self * rhs.y,
116 self * rhs.z
117 );
118}
119
120/// Scalar multiplication with vector
121///
122/// ```
123/// use gfxmath_vec3::Vec3;
124///
125/// let a = Vec3::<i64>::new(5, 2, -2);
126/// let b = Vec3::from(2 * a);
127///
128/// assert_eq!( 10, b.x);
129/// assert_eq!( 4, b.y);
130/// assert_eq!(-4, b.z);
131/// ```
132#[opimps::impl_ops_lprim(Mul)]
133fn mul(self: i64, rhs: Vec3<i64>) -> Vec3<i64> {
134 return Vec3::new(
135 self * rhs.x,
136 self * rhs.y,
137 self * rhs.z
138 );
139}
140// End of scalar multiplication