mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 19:56:44 +01:00
30 lines
660 B
Rust
30 lines
660 B
Rust
use crate::*;
|
|
|
|
/// 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)
|
|
}
|
|
}
|