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}