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