gfxmath_vec2/impls/add/
add.rs

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