gfxmath_vec3/impls/add/
add.rs

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