35 lines
594 B
Rust
35 lines
594 B
Rust
|
use std::cmp::Eq;
|
||
|
use std::hash::Hash;
|
||
|
use std::ops::Add;
|
||
|
|
||
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
||
|
pub struct Vector2D<T> {
|
||
|
x: T,
|
||
|
y: T,
|
||
|
}
|
||
|
|
||
|
impl<T> Vector2D<T> {
|
||
|
pub fn new(x: T, y: T) -> Vector2D<T> {
|
||
|
Vector2D { x, y }
|
||
|
}
|
||
|
|
||
|
pub fn x(&self) -> &T {
|
||
|
&self.x
|
||
|
}
|
||
|
|
||
|
pub fn y(&self) -> &T {
|
||
|
&self.y
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl<T: Add + Add<Output = U>, U> Add for Vector2D<T> {
|
||
|
type Output = Vector2D<U>;
|
||
|
|
||
|
fn add(self, rhs: Self) -> Self::Output {
|
||
|
Vector2D {
|
||
|
x: self.x + rhs.x,
|
||
|
y: self.y + rhs.y,
|
||
|
}
|
||
|
}
|
||
|
}
|