use super::Point;
impl<X, Y> Point<X, Y> {
pub const fn new(x: X, y: Y) -> Self {
Point { x, y }
}
pub fn from_tuple((x, y): (X, Y)) -> Self {
Point { x, y }
}
pub const fn x(&self) -> &X {
&self.x
}
pub const fn x_mut(&mut self) -> &mut X {
&mut self.x
}
pub const fn y(&self) -> &Y {
&self.y
}
pub const fn y_mut(&mut self) -> &mut Y {
&mut self.y
}
pub const fn replace_x(&mut self, x: X) -> X {
core::mem::replace(self.x_mut(), x)
}
pub const fn replace_y(&mut self, y: Y) -> Y {
core::mem::replace(self.y_mut(), y)
}
#[inline]
pub fn set_x(&mut self, x: X) {
self.x = x;
}
#[inline]
pub fn set_y(&mut self, y: Y) {
self.y = y;
}
#[inline]
pub fn with_x<X2>(self, x: X2) -> Point<X2, Y> {
Point { x, y: self.y }
}
#[inline]
pub fn with_y<Y2>(self, y: Y2) -> Point<X, Y2> {
Point { x: self.x, y }
}
pub const fn as_view(&self) -> Point<&X, &Y> {
Point {
x: self.x(),
y: self.y(),
}
}
pub const fn as_mut_view(&mut self) -> Point<&mut X, &mut Y> {
Point {
x: &mut self.x,
y: &mut self.y,
}
}
pub const fn as_tuple(&self) -> (&X, &Y) {
(self.x(), self.y())
}
#[inline]
pub fn into_tuple(self) -> (X, Y) {
(self.x, self.y)
}
}