deranged

Struct RangedUsize

source
pub struct RangedUsize<const MIN: usize, const MAX: usize>(/* private fields */);
Expand description

A usize that is known to be in the range MIN..=MAX.

Implementations§

source§

impl RangedUsize<0, 0>

source

pub const fn exact<const VALUE: usize>() -> RangedUsize<VALUE, VALUE>

source§

impl<const MIN: usize, const MAX: usize> RangedUsize<MIN, MAX>

source

pub const MIN: Self = _

The smallest value that can be represented by this type.

source

pub const MAX: Self = _

The largest value that can be represented by this type.

source

pub const unsafe fn new_unchecked(value: usize) -> Self

Creates a ranged integer without checking the value.

§Safety

The value must be within the range MIN..=MAX.

source

pub const fn get(self) -> usize

Returns the value as a primitive type.

source

pub const fn new(value: usize) -> Option<Self>

Creates a ranged integer if the given value is in the range MIN..=MAX.

source

pub const fn new_static<const VALUE: usize>() -> Self

Creates a ranged integer with a statically known value. Fails to compile if the value is not in range.

source

pub const fn new_saturating(value: usize) -> Self

Creates a ranged integer with the given value, saturating if it is out of range.

source

pub const fn expand<const NEW_MIN: usize, const NEW_MAX: usize>( self, ) -> RangedUsize<NEW_MIN, NEW_MAX>

Expand the range that the value may be in. Fails to compile if the new range is not a superset of the current range.

source

pub const fn narrow<const NEW_MIN: usize, const NEW_MAX: usize>( self, ) -> Option<RangedUsize<NEW_MIN, NEW_MAX>>

Attempt to narrow the range that the value may be in. Returns None if the value is outside the new range. Fails to compile if the new range is not a subset of the current range.

source

pub fn from_str_radix(src: &str, radix: u32) -> Result<Self, ParseIntError>

Converts a string slice in a given base to an integer.

The string is expected to be an optional + or - sign followed by digits. Leading and trailing whitespace represent an error. Digits are a subset of these characters, depending on radix:

  • 0-9
  • a-z
  • A-Z
§Panics

Panics if radix is not in the range 2..=36.

§Examples

Basic usage:

assert_eq!(RangedUsize::<5, 10>::from_str_radix("A", 16), Ok(RangedUsize::new_static::<10>()));
source

pub const fn checked_add(self, rhs: usize) -> Option<Self>

Checked integer addition. Computes self + rhs, returning None if the resulting value is out of range.

source

pub const unsafe fn unchecked_add(self, rhs: usize) -> Self

Unchecked integer addition. Computes self + rhs, assuming that the result is in range.

§Safety

The result of self + rhs must be in the range MIN..=MAX.

source

pub const fn checked_sub(self, rhs: usize) -> Option<Self>

Checked integer addition. Computes self - rhs, returning None if the resulting value is out of range.

source

pub const unsafe fn unchecked_sub(self, rhs: usize) -> Self

Unchecked integer subtraction. Computes self - rhs, assuming that the result is in range.

§Safety

The result of self - rhs must be in the range MIN..=MAX.

source

pub const fn checked_mul(self, rhs: usize) -> Option<Self>

Checked integer addition. Computes self * rhs, returning None if the resulting value is out of range.

source

pub const unsafe fn unchecked_mul(self, rhs: usize) -> Self

Unchecked integer multiplication. Computes self * rhs, assuming that the result is in range.

§Safety

The result of self * rhs must be in the range MIN..=MAX.

source

pub const fn checked_div(self, rhs: usize) -> Option<Self>

Checked integer addition. Computes self / rhs, returning None if rhs == 0 or if the resulting value is out of range.

source

pub const unsafe fn unchecked_div(self, rhs: usize) -> Self

Unchecked integer division. Computes self / rhs, assuming that rhs != 0 and that the result is in range.

§Safety

self must not be zero and the result of self / rhs must be in the range MIN..=MAX.

source

pub const fn checked_div_euclid(self, rhs: usize) -> Option<Self>

Checked Euclidean division. Computes self.div_euclid(rhs), returning None if rhs == 0 or if the resulting value is out of range.

source

pub const unsafe fn unchecked_div_euclid(self, rhs: usize) -> Self

Unchecked Euclidean division. Computes self.div_euclid(rhs), assuming that rhs != 0 and that the result is in range.

§Safety

self must not be zero and the result of self.div_euclid(rhs) must be in the range MIN..=MAX.

source

pub const fn rem<const RHS_VALUE: usize>( self, rhs: RangedUsize<RHS_VALUE, RHS_VALUE>, ) -> RangedUsize<0, RHS_VALUE>

Remainder. Computes self % rhs, statically guaranteeing that the returned value is in range.

source

pub const fn checked_rem(self, rhs: usize) -> Option<Self>

Checked integer remainder. Computes self % rhs, returning None if rhs == 0 or if the resulting value is out of range.

source

pub const unsafe fn unchecked_rem(self, rhs: usize) -> Self

Unchecked remainder. Computes self % rhs, assuming that rhs != 0 and that the result is in range.

§Safety

self must not be zero and the result of self % rhs must be in the range MIN..=MAX.

source

pub const fn checked_rem_euclid(self, rhs: usize) -> Option<Self>

Checked Euclidean remainder. Computes self.rem_euclid(rhs), returning None if rhs == 0 or if the resulting value is out of range.

source

pub const unsafe fn unchecked_rem_euclid(self, rhs: usize) -> Self

Unchecked Euclidean remainder. Computes self.rem_euclid(rhs), assuming that rhs != 0 and that the result is in range.

§Safety

self must not be zero and the result of self.rem_euclid(rhs) must be in the range MIN..=MAX.

source

pub const fn checked_neg(self) -> Option<Self>

Checked negation. Computes -self, returning None if the resulting value is out of range.

source

pub const unsafe fn unchecked_neg(self) -> Self

Unchecked negation. Computes -self, assuming that -self is in range.

§Safety

The result of -self must be in the range MIN..=MAX.

source

pub const fn neg(self) -> Self

Negation. Computes self.neg(), failing to compile if the result is not guaranteed to be in range.

source

pub const fn checked_shl(self, rhs: u32) -> Option<Self>

Checked shift left. Computes self << rhs, returning None if the resulting value is out of range.

source

pub const unsafe fn unchecked_shl(self, rhs: u32) -> Self

Unchecked shift left. Computes self << rhs, assuming that the result is in range.

§Safety

The result of self << rhs must be in the range MIN..=MAX.

source

pub const fn checked_shr(self, rhs: u32) -> Option<Self>

Checked shift right. Computes self >> rhs, returning None if the resulting value is out of range.

source

pub const unsafe fn unchecked_shr(self, rhs: u32) -> Self

Unchecked shift right. Computes self >> rhs, assuming that the result is in range.

§Safety

The result of self >> rhs must be in the range MIN..=MAX.

source

pub const fn checked_pow(self, exp: u32) -> Option<Self>

Checked exponentiation. Computes self.pow(exp), returning None if the resulting value is out of range.

source

pub const unsafe fn unchecked_pow(self, exp: u32) -> Self

Unchecked exponentiation. Computes self.pow(exp), assuming that the result is in range.

§Safety

The result of self.pow(exp) must be in the range MIN..=MAX.

source

pub const fn saturating_add(self, rhs: usize) -> Self

Saturating integer addition. Computes self + rhs, saturating at the numeric bounds.

source

pub const fn saturating_sub(self, rhs: usize) -> Self

Saturating integer subtraction. Computes self - rhs, saturating at the numeric bounds.

source

pub const fn saturating_mul(self, rhs: usize) -> Self

Saturating integer multiplication. Computes self * rhs, saturating at the numeric bounds.

source

pub const fn saturating_pow(self, exp: u32) -> Self

Saturating integer exponentiation. Computes self.pow(exp), saturating at the numeric bounds.

source

pub const fn wrapping_add(self, rhs: usize) -> Self

Wrapping integer addition. Computes self + rhs, wrapping around the numeric bounds.

source

pub const fn wrapping_sub(self, rhs: usize) -> Self

Wrapping integer subtraction. Computes self - rhs, wrapping around the numeric bounds.

Trait Implementations§

source§

impl<const MIN: usize, const MAX: usize> Arbitrary for RangedUsize<MIN, MAX>

source§

fn arbitrary(g: &mut Gen) -> Self

Return an arbitrary value. Read more
source§

fn shrink(&self) -> Box<dyn Iterator<Item = Self>>

Return an iterator of values that are smaller than itself. Read more
source§

impl<const MIN: usize, const MAX: usize> AsRef<usize> for RangedUsize<MIN, MAX>

source§

fn as_ref(&self) -> &usize

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl<const MIN: usize, const MAX: usize> Binary for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<const MIN: usize, const MAX: usize> Borrow<usize> for RangedUsize<MIN, MAX>

source§

fn borrow(&self) -> &usize

Immutably borrows from an owned value. Read more
source§

impl<const MIN: usize, const MAX: usize> Clone for RangedUsize<MIN, MAX>

source§

fn clone(&self) -> RangedUsize<MIN, MAX>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<const MIN: usize, const MAX: usize> Debug for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, const MIN: usize, const MAX: usize> Deserialize<'de> for RangedUsize<MIN, MAX>

source§

fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>

Deserialize this value from the given Serde deserializer. Read more
source§

impl<const MIN: usize, const MAX: usize> Display for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<const MIN: usize, const MAX: usize> Distribution<RangedUsize<MIN, MAX>> for Standard

source§

fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> RangedUsize<MIN, MAX>

Generate a random value of T, using rng as the source of randomness.
source§

fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
where R: Rng, Self: Sized,

Create an iterator that generates random values of T, using rng as the source of randomness. Read more
source§

fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
where F: Fn(T) -> S, Self: Sized,

Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
source§

impl<const MIN: usize, const MAX: usize> From<RangedUsize<MIN, MAX>> for OptionRangedUsize<MIN, MAX>

source§

fn from(value: RangedUsize<MIN, MAX>) -> Self

Converts to this type from the input type.
source§

impl<const MIN: usize, const MAX: usize> From<RangedUsize<MIN, MAX>> for usize

source§

fn from(value: RangedUsize<MIN, MAX>) -> Self

Converts to this type from the input type.
source§

impl<const MIN: usize, const MAX: usize> FromStr for RangedUsize<MIN, MAX>

source§

type Err = ParseIntError

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl<const MIN: usize, const MAX: usize> Hash for RangedUsize<MIN, MAX>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<const MIN: usize, const MAX: usize> LowerExp for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<const MIN: usize, const MAX: usize> LowerHex for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<const MIN: usize, const MAX: usize> Octal for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<const MIN: usize, const MAX: usize> Ord for RangedUsize<MIN, MAX>

source§

fn cmp(&self, other: &RangedUsize<MIN, MAX>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
source§

impl<const MIN_A: usize, const MAX_A: usize, const MIN_B: usize, const MAX_B: usize> PartialEq<RangedUsize<MIN_B, MAX_B>> for RangedUsize<MIN_A, MAX_A>

source§

fn eq(&self, other: &RangedUsize<MIN_B, MAX_B>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<const MIN_A: usize, const MAX_A: usize, const MIN_B: usize, const MAX_B: usize> PartialOrd<RangedUsize<MIN_B, MAX_B>> for RangedUsize<MIN_A, MAX_A>

source§

fn partial_cmp(&self, other: &RangedUsize<MIN_B, MAX_B>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl<const MIN: usize, const MAX: usize> Serialize for RangedUsize<MIN, MAX>

source§

fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more
source§

impl<const MIN: usize, const MAX: usize> SmartDisplay for RangedUsize<MIN, MAX>

source§

type Metadata = <usize as SmartDisplay>::Metadata

User-provided metadata type.
source§

fn metadata(&self, f: FormatterOptions) -> Metadata<'_, Self>

Compute any information needed to format the value. This must, at a minimum, determine the width of the value before any padding is added by the formatter. Read more
source§

fn fmt_with_metadata( &self, f: &mut Formatter<'_>, metadata: Metadata<'_, Self>, ) -> Result

Format the value using the given formatter and metadata. The formatted output should have the width indicated by the metadata. This is before any padding is added by the formatter. Read more
source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Format the value using the given formatter. This is the same as Display::fmt. Read more
source§

impl<const MIN: usize, const MAX: usize> TryFrom<usize> for RangedUsize<MIN, MAX>

source§

type Error = TryFromIntError

The type returned in the event of a conversion error.
source§

fn try_from(value: usize) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl<const MIN: usize, const MAX: usize> UpperExp for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<const MIN: usize, const MAX: usize> UpperHex for RangedUsize<MIN, MAX>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<const MIN: usize, const MAX: usize> Copy for RangedUsize<MIN, MAX>

source§

impl<const MIN: usize, const MAX: usize> Eq for RangedUsize<MIN, MAX>

Auto Trait Implementations§

§

impl<const MIN: usize, const MAX: usize> Freeze for RangedUsize<MIN, MAX>

§

impl<const MIN: usize, const MAX: usize> RefUnwindSafe for RangedUsize<MIN, MAX>

§

impl<const MIN: usize, const MAX: usize> Send for RangedUsize<MIN, MAX>

§

impl<const MIN: usize, const MAX: usize> Sync for RangedUsize<MIN, MAX>

§

impl<const MIN: usize, const MAX: usize> Unpin for RangedUsize<MIN, MAX>

§

impl<const MIN: usize, const MAX: usize> UnwindSafe for RangedUsize<MIN, MAX>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,