mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 11:46:42 +01:00
31 lines
714 B
Rust
31 lines
714 B
Rust
use std::fmt::{Debug, Display};
|
|
use std::ops::{Add, Sub, Mul, Div};
|
|
|
|
/// A linear coordinate.
|
|
pub trait Coordinate: Send + Sync + Copy
|
|
+ Add<Self, Output=Self>
|
|
+ Sub<Self, Output=Self>
|
|
+ Mul<Self, Output=Self>
|
|
+ Div<Self, Output=Self>
|
|
+ Ord + PartialEq + Eq
|
|
+ Debug + Display + Default
|
|
+ From<u16> + Into<u16>
|
|
+ Into<usize>
|
|
+ Into<f64>
|
|
{
|
|
fn zero () -> Self { 0.into() }
|
|
fn plus (self, other: Self) -> Self;
|
|
fn minus (self, other: Self) -> Self {
|
|
if self >= other {
|
|
self - other
|
|
} else {
|
|
0.into()
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Coordinate for u16 {
|
|
fn plus (self, other: Self) -> Self {
|
|
self.saturating_add(other)
|
|
}
|
|
}
|