diff --git a/src/util/rational.rs b/src/util/rational.rs index 9c9b89e..9b51202 100644 --- a/src/util/rational.rs +++ b/src/util/rational.rs @@ -14,6 +14,8 @@ use crate::ffi::*; pub struct Rational(pub i32, pub i32); impl Rational { + pub const ZERO: Rational = Rational(0, 1); + #[inline] pub fn new(numerator: i32, denominator: i32) -> Self { Rational(numerator, denominator) @@ -69,6 +71,17 @@ impl Rational { pub fn approx(&self) -> f64 { self.0 as f64 / self.1 as f64 } + + #[inline] + pub fn non_zero(self) -> Option { + (self.numerator() != 0).then_some(self) + } +} + +impl Default for Rational { + fn default() -> Self { + Rational::ZERO + } } impl From for Rational {