From 8634d2fad620c2b50e929eb9c66a36f09cd528e2 Mon Sep 17 00:00:00 2001 From: Fabio Krapohl Date: Wed, 17 Jan 2018 13:50:33 +0100 Subject: [PATCH] associated consts --- Cargo.toml | 2 +- src/identities.rs | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c388e9e..8870830 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ categories = [ "algorithms", "science" ] license = "MIT/Apache-2.0" repository = "https://github.com/rust-num/num-traits" name = "num-traits" -version = "0.1.41" +version = "0.2.0" readme = "README.md" [dependencies] diff --git a/src/identities.rs b/src/identities.rs index 79882ed..99c7e46 100644 --- a/src/identities.rs +++ b/src/identities.rs @@ -18,7 +18,11 @@ pub trait Zero: Sized + Add { /// external mutable state, for example values stored in TLS or in /// `static mut`s. // FIXME (#5527): This should be an associated constant - fn zero() -> Self; + const ZERO: Self; + + fn zero() -> Self { + Self::ZERO + } /// Returns `true` if `self` is equal to the additive identity. #[inline] @@ -28,6 +32,7 @@ pub trait Zero: Sized + Add { macro_rules! zero_impl { ($t:ty, $v:expr) => { impl Zero for $t { + const ZERO: $t = $v; #[inline] fn zero() -> $t { $v } #[inline] @@ -52,12 +57,12 @@ zero_impl!(f32, 0.0f32); zero_impl!(f64, 0.0f64); impl Zero for Wrapping where Wrapping: Add> { + + fn is_zero(&self) -> bool { self.0.is_zero() } - fn zero() -> Self { - Wrapping(T::zero()) - } + const ZERO: Self = Wrapping(T::ZERO); } @@ -78,12 +83,17 @@ pub trait One: Sized + Mul { /// external mutable state, for example values stored in TLS or in /// `static mut`s. // FIXME (#5527): This should be an associated constant - fn one() -> Self; + const ONE: Self; + + fn one() -> Self { + Self::ONE + } } macro_rules! one_impl { ($t:ty, $v:expr) => { impl One for $t { + const ONE: $t = $v; #[inline] fn one() -> $t { $v } } @@ -106,9 +116,7 @@ one_impl!(f32, 1.0f32); one_impl!(f64, 1.0f64); impl One for Wrapping where Wrapping: Mul> { - fn one() -> Self { - Wrapping(T::one()) - } + const ONE: Self = Wrapping(T::ONE); } // Some helper functions provided for backwards compatibility.