mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 15:23:46 +00:00
Rollup merge of #93293 - nvzqz:nonzero-min-max, r=joshtriplett
Implement `MIN`/`MAX` constants for non-zero integers This adds the associated [`MIN`](https://doc.rust-lang.org/stable/std/primitive.usize.html#associatedconstant.MIN)/[`MAX`](https://doc.rust-lang.org/stable/std/primitive.usize.html#associatedconstant.MAX) constants to `NonZero{U,I}{8,16,32,64,128,size}`, requested in #89065. This reimplements #89077 due that PR being stagnant for 4 months. I am fine with closing this in favor of that one if the author revisits it. If so, I'd like to see that PR have the docs link to the `$Int`'s constants.
This commit is contained in:
commit
d58c69ae96
@ -989,3 +989,104 @@ macro_rules! nonzero_unsigned_is_power_of_two {
|
|||||||
}
|
}
|
||||||
|
|
||||||
nonzero_unsigned_is_power_of_two! { NonZeroU8 NonZeroU16 NonZeroU32 NonZeroU64 NonZeroU128 NonZeroUsize }
|
nonzero_unsigned_is_power_of_two! { NonZeroU8 NonZeroU16 NonZeroU32 NonZeroU64 NonZeroU128 NonZeroUsize }
|
||||||
|
|
||||||
|
macro_rules! nonzero_min_max_unsigned {
|
||||||
|
( $( $Ty: ident($Int: ident); )+ ) => {
|
||||||
|
$(
|
||||||
|
impl $Ty {
|
||||||
|
/// The smallest value that can be represented by this non-zero
|
||||||
|
/// integer type, 1.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(nonzero_min_max)]
|
||||||
|
#[doc = concat!("# use std::num::", stringify!($Ty), ";")]
|
||||||
|
///
|
||||||
|
#[doc = concat!("assert_eq!(", stringify!($Ty), "::MIN.get(), 1", stringify!($Int), ");")]
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "nonzero_min_max", issue = "89065")]
|
||||||
|
pub const MIN: Self = Self::new(1).unwrap();
|
||||||
|
|
||||||
|
/// The largest value that can be represented by this non-zero
|
||||||
|
/// integer type,
|
||||||
|
#[doc = concat!("equal to [`", stringify!($Int), "::MAX`].")]
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(nonzero_min_max)]
|
||||||
|
#[doc = concat!("# use std::num::", stringify!($Ty), ";")]
|
||||||
|
///
|
||||||
|
#[doc = concat!("assert_eq!(", stringify!($Ty), "::MAX.get(), ", stringify!($Int), "::MAX);")]
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "nonzero_min_max", issue = "89065")]
|
||||||
|
pub const MAX: Self = Self::new(<$Int>::MAX).unwrap();
|
||||||
|
}
|
||||||
|
)+
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! nonzero_min_max_signed {
|
||||||
|
( $( $Ty: ident($Int: ident); )+ ) => {
|
||||||
|
$(
|
||||||
|
impl $Ty {
|
||||||
|
/// The smallest value that can be represented by this non-zero
|
||||||
|
/// integer type,
|
||||||
|
#[doc = concat!("equal to [`", stringify!($Int), "::MIN`].")]
|
||||||
|
///
|
||||||
|
/// Note: While most integer types are defined for every whole
|
||||||
|
/// number between `MIN` and `MAX`, signed non-zero integers are
|
||||||
|
/// a special case. They have a "gap" at 0.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(nonzero_min_max)]
|
||||||
|
#[doc = concat!("# use std::num::", stringify!($Ty), ";")]
|
||||||
|
///
|
||||||
|
#[doc = concat!("assert_eq!(", stringify!($Ty), "::MIN.get(), ", stringify!($Int), "::MIN);")]
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "nonzero_min_max", issue = "89065")]
|
||||||
|
pub const MIN: Self = Self::new(<$Int>::MIN).unwrap();
|
||||||
|
|
||||||
|
/// The largest value that can be represented by this non-zero
|
||||||
|
/// integer type,
|
||||||
|
#[doc = concat!("equal to [`", stringify!($Int), "::MAX`].")]
|
||||||
|
///
|
||||||
|
/// Note: While most integer types are defined for every whole
|
||||||
|
/// number between `MIN` and `MAX`, signed non-zero integers are
|
||||||
|
/// a special case. They have a "gap" at 0.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(nonzero_min_max)]
|
||||||
|
#[doc = concat!("# use std::num::", stringify!($Ty), ";")]
|
||||||
|
///
|
||||||
|
#[doc = concat!("assert_eq!(", stringify!($Ty), "::MAX.get(), ", stringify!($Int), "::MAX);")]
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "nonzero_min_max", issue = "89065")]
|
||||||
|
pub const MAX: Self = Self::new(<$Int>::MAX).unwrap();
|
||||||
|
}
|
||||||
|
)+
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nonzero_min_max_unsigned! {
|
||||||
|
NonZeroU8(u8);
|
||||||
|
NonZeroU16(u16);
|
||||||
|
NonZeroU32(u32);
|
||||||
|
NonZeroU64(u64);
|
||||||
|
NonZeroU128(u128);
|
||||||
|
NonZeroUsize(usize);
|
||||||
|
}
|
||||||
|
|
||||||
|
nonzero_min_max_signed! {
|
||||||
|
NonZeroI8(i8);
|
||||||
|
NonZeroI16(i16);
|
||||||
|
NonZeroI32(i32);
|
||||||
|
NonZeroI64(i64);
|
||||||
|
NonZeroI128(i128);
|
||||||
|
NonZeroIsize(isize);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user