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}