Skip to content

Commit

Permalink
Add LowerBounded/UpperBounded traits
Browse files Browse the repository at this point in the history
  • Loading branch information
clarfonthey committed Mar 22, 2021
1 parent 47d6922 commit f9422e7
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions src/bounds.rs
Expand Up @@ -8,12 +8,38 @@ use core::{u16, u32, u64, u8, usize};
/// Numbers which have upper and lower bounds
pub trait Bounded {
// FIXME (#5527): These should be associated constants
/// returns the smallest finite number this type can represent
/// Returns the smallest finite number this type can represent
fn min_value() -> Self;
/// returns the largest finite number this type can represent
/// Returns the largest finite number this type can represent
fn max_value() -> Self;
}

/// Numbers which have lower bounds
pub trait LowerBounded {
/// Returns the smallest finite number this type can represent
fn min_value() -> Self;
}

// FIXME: With a major version bump, this should be a supertrait instead
impl<T: Bounded> LowerBounded for T {
fn min_value() -> T {
Bounded::min_value()
}
}

/// Numbers which have upper bounds
pub trait UpperBounded {
/// Returns the largest finite number this type can represent
fn max_value() -> Self;
}

// FIXME: With a major version bump, this should be a supertrait instead
impl<T: Bounded> UpperBounded for T {
fn max_value() -> T {
Bounded::max_value()
}
}

macro_rules! bounded_impl {
($t:ty, $min:expr, $max:expr) => {
impl Bounded for $t {
Expand Down

0 comments on commit f9422e7

Please sign in to comment.