Skip to main content

vec3_rs/
ops.rs

1use crate::{Vector3, Vector3Coordinate};
2use core::ops::{Add, AddAssign, Sub, SubAssign};
3
4impl<T: Vector3Coordinate> Add<Self> for Vector3<T> {
5    type Output = Self;
6    fn add(self, rhs: Self) -> Self::Output {
7        Self {
8            x: self.x + rhs.x,
9            y: self.y + rhs.y,
10            z: self.z + rhs.z,
11        }
12    }
13}
14
15impl<T: Vector3Coordinate> Sub<Self> for Vector3<T> {
16    type Output = Self;
17    fn sub(self, rhs: Self) -> Self::Output {
18        Self {
19            x: self.x - rhs.x,
20            y: self.y - rhs.y,
21            z: self.z - rhs.z,
22        }
23    }
24}
25
26impl<T: Vector3Coordinate> AddAssign<Self> for Vector3<T> {
27    fn add_assign(&mut self, rhs: Self) {
28        self.x += rhs.x;
29        self.y += rhs.y;
30        self.z += rhs.z;
31    }
32}
33
34impl<T: Vector3Coordinate> SubAssign<Self> for Vector3<T> {
35    fn sub_assign(&mut self, rhs: Self) {
36        self.x -= rhs.x;
37        self.y -= rhs.y;
38        self.z -= rhs.z;
39    }
40}