rokdocs
v0.1

rok::core::num::niche

rok::core::num::niche - wrappers that leave out values (stdlib spec 2.2): NonZero<T> (0), NonNan<F> (NaN), Finite<F> (NaN, ±∞), Positive<T> (negatives; refs-lang 2.7.6). Each is a #[niche(..)] newtype, so NonZero<i32> | none is 4 bytes and NonNan<f64> | none 8 (refs-lang 2.7.4). new checks; new_unchecked is unsafe: a left-out value in one reads as none once it is in a sum.

Structs

ZeroError

pub struct ZeroError

What NonZero::try_from(0) throws (2.2.8).

Trait implementations 3
  • impl Display for ZeroError
  • impl Debug for ZeroError
  • impl Error for ZeroError

NonZero

pub struct NonZero<T>(T)

A T that is never 0 (2.2.2).

  • pub const fn new(value: T) -> NonZero<T> | none
  • pub const unsafe fn new_unchecked(value: T) -> NonZero<T>

    value must not be 0.

  • pub const fn get(self) -> T
Trait implementations 14
  • impl<T: NicheInt> Clone for NonZero<T>
  • impl<T: NicheInt> Copy for NonZero<T>
  • impl<T: NicheInt> PartialEq for NonZero<T>
  • impl<T: NicheInt> Eq for NonZero<T>
  • impl<T: NicheInt> PartialOrd for NonZero<T>
  • impl<T: NicheInt> Ord for NonZero<T>
  • impl<T: NicheInt> Hash for NonZero<T>
  • impl<T: NicheInt> Display for NonZero<T>
  • impl<T: NicheInt> Debug for NonZero<T>
  • impl<T: NicheInt> Mul for NonZero<T>
  • impl<T: NicheInt> Add for NonZero<T>
  • impl<T: NicheInt> Sub for NonZero<T>
  • impl<T: NicheInt> Div for NonZero<T>
  • impl<T: NicheInt> TryFrom<T> for NonZero<T>

Positive

pub struct Positive<T>(T)

A T that is never negative (refs-lang 2.7.6). Positive<u*> has no negatives, so it has no niche either.

  • pub const fn new(value: T) -> Positive<T> | none
  • pub unsafe fn new_unchecked(value: T) -> Positive<T>

    value must not be negative.

  • pub const fn get(self) -> T
Trait implementations 9
  • impl<T: NicheInt> Clone for Positive<T>
  • impl<T: NicheInt> Copy for Positive<T>
  • impl<T: NicheInt> PartialEq for Positive<T>
  • impl<T: NicheInt> Eq for Positive<T>
  • impl<T: NicheInt> PartialOrd for Positive<T>
  • impl<T: NicheInt> Ord for Positive<T>
  • impl<T: NicheInt> Hash for Positive<T>
  • impl<T: NicheInt> Display for Positive<T>
  • impl<T: NicheInt> Debug for Positive<T>

NonNan

pub struct NonNan<F>(F)

An F that is never NaN (2.2.3): totally ordered, so Eq / Ord / Hash (-0.0 == 0.0, and they hash alike).

  • pub const fn new(value: F) -> NonNan<F> | none
  • pub unsafe fn new_unchecked(value: F) -> NonNan<F>

    value must not be NaN.

  • pub fn get(self) -> F
Trait implementations 14
  • impl<F: NicheFloat> Clone for NonNan<F>
  • impl<F: NicheFloat> Copy for NonNan<F>
  • impl<F: NicheFloat> PartialEq for NonNan<F>
  • impl<F: NicheFloat> Eq for NonNan<F>
  • impl<F: NicheFloat> PartialOrd for NonNan<F>
  • impl<F: NicheFloat> Ord for NonNan<F>
  • impl<F: NicheFloat> Hash for NonNan<F>
  • impl<F: NicheFloat> Display for NonNan<F>
  • impl<F: NicheFloat> Debug for NonNan<F>
  • impl<F: NicheFloat> Add for NonNan<F>
  • impl<F: NicheFloat> Sub for NonNan<F>
  • impl<F: NicheFloat> Mul for NonNan<F>
  • impl<F: NicheFloat> Div for NonNan<F>
  • impl<F: NicheFloat> TryFrom<F> for NonNan<F>

Finite

pub struct Finite<F>(F)

An F that is neither NaN nor ±∞ (2.2.4).

  • pub const fn new(value: F) -> Finite<F> | none
  • pub unsafe fn new_unchecked(value: F) -> Finite<F>

    value must be finite.

  • pub fn get(self) -> F
Trait implementations 13
  • impl<F: NicheFloat> Clone for Finite<F>
  • impl<F: NicheFloat> Copy for Finite<F>
  • impl<F: NicheFloat> PartialEq for Finite<F>
  • impl<F: NicheFloat> Eq for Finite<F>
  • impl<F: NicheFloat> PartialOrd for Finite<F>
  • impl<F: NicheFloat> Ord for Finite<F>
  • impl<F: NicheFloat> Hash for Finite<F>
  • impl<F: NicheFloat> Display for Finite<F>
  • impl<F: NicheFloat> Debug for Finite<F>
  • impl<F: NicheFloat> Add for Finite<F>
  • impl<F: NicheFloat> Sub for Finite<F>
  • impl<F: NicheFloat> Mul for Finite<F>
  • impl<F: NicheFloat> TryFrom<F> for Finite<F>

Traits

NicheInt

pub trait NicheInt: Zero + Copy + Ord + Hash + Display + Debug + Add<Output = Self> + Sub<Output = Self> + Mul<Output = Self> + Div<Output = Self>

The integer types NonZero / Positive wrap.

NicheFloat

pub trait NicheFloat: Copy + PartialOrd + Display + Debug + Add<Output = Self> + Sub<Output = Self> + Mul<Output = Self> + Div<Output = Self>

The float types NonNan / Finite wrap.

  • fn niche_nan(self) -> bool
  • fn niche_finite(self) -> bool
  • fn key(self) -> u64

    The bits, widened, with -0.0 as 0.0 (Hash).