summaryrefslogtreecommitdiffstats
path: root/library/core/src/num/saturating.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
commitc23a457e72abe608715ac76f076f47dc42af07a5 (patch)
tree2772049aaf84b5c9d0ed12ec8d86812f7a7904b6 /library/core/src/num/saturating.rs
parentReleasing progress-linux version 1.73.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-c23a457e72abe608715ac76f076f47dc42af07a5.tar.xz
rustc-c23a457e72abe608715ac76f076f47dc42af07a5.zip
Merging upstream version 1.74.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/core/src/num/saturating.rs')
-rw-r--r--library/core/src/num/saturating.rs438
1 files changed, 218 insertions, 220 deletions
diff --git a/library/core/src/num/saturating.rs b/library/core/src/num/saturating.rs
index 8982473b2..d9ccc73c4 100644
--- a/library/core/src/num/saturating.rs
+++ b/library/core/src/num/saturating.rs
@@ -4,7 +4,7 @@ use crate::fmt;
use crate::ops::{Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign};
use crate::ops::{BitXor, BitXorAssign, Div, DivAssign};
use crate::ops::{Mul, MulAssign, Neg, Not, Rem, RemAssign};
-use crate::ops::{Shl, ShlAssign, Shr, ShrAssign, Sub, SubAssign};
+use crate::ops::{Sub, SubAssign};
/// Provides intentionally-saturating arithmetic on `T`.
///
@@ -24,7 +24,6 @@ use crate::ops::{Shl, ShlAssign, Shr, ShrAssign, Sub, SubAssign};
/// # Examples
///
/// ```
-/// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
/// let max = Saturating(u32::MAX);
@@ -32,180 +31,186 @@ use crate::ops::{Shl, ShlAssign, Shr, ShrAssign, Sub, SubAssign};
///
/// assert_eq!(u32::MAX, (max + one).0);
/// ```
-#[unstable(feature = "saturating_int_impl", issue = "87920")]
+#[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Default, Hash)]
#[repr(transparent)]
-pub struct Saturating<T>(#[unstable(feature = "saturating_int_impl", issue = "87920")] pub T);
+#[rustc_diagnostic_item = "Saturating"]
+pub struct Saturating<T>(
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] pub T,
+);
-#[unstable(feature = "saturating_int_impl", issue = "87920")]
+#[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl<T: fmt::Debug> fmt::Debug for Saturating<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
-#[unstable(feature = "saturating_int_impl", issue = "87920")]
+#[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl<T: fmt::Display> fmt::Display for Saturating<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
-#[unstable(feature = "saturating_int_impl", issue = "87920")]
+#[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl<T: fmt::Binary> fmt::Binary for Saturating<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
-#[unstable(feature = "saturating_int_impl", issue = "87920")]
+#[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl<T: fmt::Octal> fmt::Octal for Saturating<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
-#[unstable(feature = "saturating_int_impl", issue = "87920")]
+#[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl<T: fmt::LowerHex> fmt::LowerHex for Saturating<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
-#[unstable(feature = "saturating_int_impl", issue = "87920")]
+#[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl<T: fmt::UpperHex> fmt::UpperHex for Saturating<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
-#[allow(unused_macros)]
-macro_rules! sh_impl_signed {
- ($t:ident, $f:ident) => {
- // FIXME what is the correct implementation here? see discussion https://github.com/rust-lang/rust/pull/87921#discussion_r695870065
- //
- // #[unstable(feature = "saturating_int_impl", issue = "87920")]
- // impl Shl<$f> for Saturating<$t> {
- // type Output = Saturating<$t>;
- //
- // #[inline]
- // fn shl(self, other: $f) -> Saturating<$t> {
- // if other < 0 {
- // Saturating(self.0.shr((-other & self::shift_max::$t as $f) as u32))
- // } else {
- // Saturating(self.0.shl((other & self::shift_max::$t as $f) as u32))
- // }
- // }
- // }
- // forward_ref_binop! { impl Shl, shl for Saturating<$t>, $f,
- // #[unstable(feature = "saturating_int_impl", issue = "87920")] }
- //
- // #[unstable(feature = "saturating_int_impl", issue = "87920")]
- // impl ShlAssign<$f> for Saturating<$t> {
- // #[inline]
- // fn shl_assign(&mut self, other: $f) {
- // *self = *self << other;
- // }
- // }
- // forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
-
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- impl Shr<$f> for Saturating<$t> {
- type Output = Saturating<$t>;
-
- #[inline]
- fn shr(self, other: $f) -> Saturating<$t> {
- if other < 0 {
- Saturating(self.0.shl((-other & self::shift_max::$t as $f) as u32))
- } else {
- Saturating(self.0.shr((other & self::shift_max::$t as $f) as u32))
- }
- }
- }
- forward_ref_binop! { impl Shr, shr for Saturating<$t>, $f,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
-
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- impl ShrAssign<$f> for Saturating<$t> {
- #[inline]
- fn shr_assign(&mut self, other: $f) {
- *self = *self >> other;
- }
- }
- forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f }
- };
-}
-
-macro_rules! sh_impl_unsigned {
- ($t:ident, $f:ident) => {
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- impl Shl<$f> for Saturating<$t> {
- type Output = Saturating<$t>;
-
- #[inline]
- fn shl(self, other: $f) -> Saturating<$t> {
- Saturating(self.0.wrapping_shl(other as u32))
- }
- }
- forward_ref_binop! { impl Shl, shl for Saturating<$t>, $f,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
-
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- impl ShlAssign<$f> for Saturating<$t> {
- #[inline]
- fn shl_assign(&mut self, other: $f) {
- *self = *self << other;
- }
- }
- forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
-
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- impl Shr<$f> for Saturating<$t> {
- type Output = Saturating<$t>;
-
- #[inline]
- fn shr(self, other: $f) -> Saturating<$t> {
- Saturating(self.0.wrapping_shr(other as u32))
- }
- }
- forward_ref_binop! { impl Shr, shr for Saturating<$t>, $f,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- impl ShrAssign<$f> for Saturating<$t> {
- #[inline]
- fn shr_assign(&mut self, other: $f) {
- *self = *self >> other;
- }
- }
- forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f }
- };
-}
-
-// FIXME (#23545): uncomment the remaining impls
-macro_rules! sh_impl_all {
- ($($t:ident)*) => ($(
- //sh_impl_unsigned! { $t, u8 }
- //sh_impl_unsigned! { $t, u16 }
- //sh_impl_unsigned! { $t, u32 }
- //sh_impl_unsigned! { $t, u64 }
- //sh_impl_unsigned! { $t, u128 }
- sh_impl_unsigned! { $t, usize }
-
- //sh_impl_signed! { $t, i8 }
- //sh_impl_signed! { $t, i16 }
- //sh_impl_signed! { $t, i32 }
- //sh_impl_signed! { $t, i64 }
- //sh_impl_signed! { $t, i128 }
- //sh_impl_signed! { $t, isize }
- )*)
-}
-
-sh_impl_all! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
+// FIXME the correct implementation is not clear. Waiting for a real world use case at https://github.com/rust-lang/libs-team/issues/230
+//
+// #[allow(unused_macros)]
+// macro_rules! sh_impl_signed {
+// ($t:ident, $f:ident) => {
+// // FIXME what is the correct implementation here? see discussion https://github.com/rust-lang/rust/pull/87921#discussion_r695870065
+// //
+// // #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// // impl Shl<$f> for Saturating<$t> {
+// // type Output = Saturating<$t>;
+// //
+// // #[inline]
+// // fn shl(self, other: $f) -> Saturating<$t> {
+// // if other < 0 {
+// // Saturating(self.0.shr((-other & self::shift_max::$t as $f) as u32))
+// // } else {
+// // Saturating(self.0.shl((other & self::shift_max::$t as $f) as u32))
+// // }
+// // }
+// // }
+// // forward_ref_binop! { impl Shl, shl for Saturating<$t>, $f,
+// // #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+// //
+// // #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// // impl ShlAssign<$f> for Saturating<$t> {
+// // #[inline]
+// // fn shl_assign(&mut self, other: $f) {
+// // *self = *self << other;
+// // }
+// // }
+// // forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
+//
+// #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// impl Shr<$f> for Saturating<$t> {
+// type Output = Saturating<$t>;
+//
+// #[inline]
+// fn shr(self, other: $f) -> Saturating<$t> {
+// if other < 0 {
+// Saturating(self.0.shl((-other & self::shift_max::$t as $f) as u32))
+// } else {
+// Saturating(self.0.shr((other & self::shift_max::$t as $f) as u32))
+// }
+// }
+// }
+// forward_ref_binop! { impl Shr, shr for Saturating<$t>, $f,
+// #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+//
+// #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// impl ShrAssign<$f> for Saturating<$t> {
+// #[inline]
+// fn shr_assign(&mut self, other: $f) {
+// *self = *self >> other;
+// }
+// }
+// forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f }
+// };
+// }
+//
+// macro_rules! sh_impl_unsigned {
+// ($t:ident, $f:ident) => {
+// #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// impl Shl<$f> for Saturating<$t> {
+// type Output = Saturating<$t>;
+//
+// #[inline]
+// fn shl(self, other: $f) -> Saturating<$t> {
+// Saturating(self.0.wrapping_shl(other as u32))
+// }
+// }
+// forward_ref_binop! { impl Shl, shl for Saturating<$t>, $f,
+// #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+//
+// #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// impl ShlAssign<$f> for Saturating<$t> {
+// #[inline]
+// fn shl_assign(&mut self, other: $f) {
+// *self = *self << other;
+// }
+// }
+// forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
+//
+// #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// impl Shr<$f> for Saturating<$t> {
+// type Output = Saturating<$t>;
+//
+// #[inline]
+// fn shr(self, other: $f) -> Saturating<$t> {
+// Saturating(self.0.wrapping_shr(other as u32))
+// }
+// }
+// forward_ref_binop! { impl Shr, shr for Saturating<$t>, $f,
+// #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+//
+// #[unstable(feature = "saturating_int_impl", issue = "87920")]
+// impl ShrAssign<$f> for Saturating<$t> {
+// #[inline]
+// fn shr_assign(&mut self, other: $f) {
+// *self = *self >> other;
+// }
+// }
+// forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f }
+// };
+// }
+//
+// // FIXME (#23545): uncomment the remaining impls
+// macro_rules! sh_impl_all {
+// ($($t:ident)*) => ($(
+// //sh_impl_unsigned! { $t, u8 }
+// //sh_impl_unsigned! { $t, u16 }
+// //sh_impl_unsigned! { $t, u32 }
+// //sh_impl_unsigned! { $t, u64 }
+// //sh_impl_unsigned! { $t, u128 }
+// sh_impl_unsigned! { $t, usize }
+//
+// //sh_impl_signed! { $t, i8 }
+// //sh_impl_signed! { $t, i16 }
+// //sh_impl_signed! { $t, i32 }
+// //sh_impl_signed! { $t, i64 }
+// //sh_impl_signed! { $t, i128 }
+// //sh_impl_signed! { $t, isize }
+// )*)
+// }
+//
+// sh_impl_all! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
// FIXME(30524): impl Op<T> for Saturating<T>, impl OpAssign<T> for Saturating<T>
macro_rules! saturating_impl {
($($t:ty)*) => ($(
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl Add for Saturating<$t> {
type Output = Saturating<$t>;
@@ -215,9 +220,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl Add, add for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl AddAssign for Saturating<$t> {
#[inline]
fn add_assign(&mut self, other: Saturating<$t>) {
@@ -226,7 +231,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl AddAssign<$t> for Saturating<$t> {
#[inline]
fn add_assign(&mut self, other: $t) {
@@ -235,7 +240,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, $t }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl Sub for Saturating<$t> {
type Output = Saturating<$t>;
@@ -245,9 +250,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl Sub, sub for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl SubAssign for Saturating<$t> {
#[inline]
fn sub_assign(&mut self, other: Saturating<$t>) {
@@ -256,7 +261,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl SubAssign<$t> for Saturating<$t> {
#[inline]
fn sub_assign(&mut self, other: $t) {
@@ -265,7 +270,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, $t }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl Mul for Saturating<$t> {
type Output = Saturating<$t>;
@@ -275,9 +280,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl Mul, mul for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl MulAssign for Saturating<$t> {
#[inline]
fn mul_assign(&mut self, other: Saturating<$t>) {
@@ -286,7 +291,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl MulAssign, mul_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl MulAssign<$t> for Saturating<$t> {
#[inline]
fn mul_assign(&mut self, other: $t) {
@@ -300,7 +305,6 @@ macro_rules! saturating_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(Saturating(2", stringify!($t), "), Saturating(5", stringify!($t), ") / Saturating(2));")]
@@ -309,12 +313,11 @@ macro_rules! saturating_impl {
/// ```
///
/// ```should_panic
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let _ = Saturating(0", stringify!($t), ") / Saturating(0);")]
/// ```
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl Div for Saturating<$t> {
type Output = Saturating<$t>;
@@ -324,10 +327,10 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl Div, div for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl DivAssign for Saturating<$t> {
#[inline]
fn div_assign(&mut self, other: Saturating<$t>) {
@@ -336,7 +339,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl DivAssign<$t> for Saturating<$t> {
#[inline]
fn div_assign(&mut self, other: $t) {
@@ -345,7 +348,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, $t }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl Rem for Saturating<$t> {
type Output = Saturating<$t>;
@@ -355,9 +358,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl Rem, rem for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl RemAssign for Saturating<$t> {
#[inline]
fn rem_assign(&mut self, other: Saturating<$t>) {
@@ -366,7 +369,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl RemAssign<$t> for Saturating<$t> {
#[inline]
fn rem_assign(&mut self, other: $t) {
@@ -375,7 +378,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, $t }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl Not for Saturating<$t> {
type Output = Saturating<$t>;
@@ -385,9 +388,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_unop! { impl Not, not for Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl BitXor for Saturating<$t> {
type Output = Saturating<$t>;
@@ -397,9 +400,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl BitXor, bitxor for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl BitXorAssign for Saturating<$t> {
#[inline]
fn bitxor_assign(&mut self, other: Saturating<$t>) {
@@ -408,7 +411,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl BitXorAssign<$t> for Saturating<$t> {
#[inline]
fn bitxor_assign(&mut self, other: $t) {
@@ -417,7 +420,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, $t }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl BitOr for Saturating<$t> {
type Output = Saturating<$t>;
@@ -427,9 +430,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl BitOr, bitor for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl BitOrAssign for Saturating<$t> {
#[inline]
fn bitor_assign(&mut self, other: Saturating<$t>) {
@@ -438,7 +441,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl BitOrAssign<$t> for Saturating<$t> {
#[inline]
fn bitor_assign(&mut self, other: $t) {
@@ -447,7 +450,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, $t }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl BitAnd for Saturating<$t> {
type Output = Saturating<$t>;
@@ -457,9 +460,9 @@ macro_rules! saturating_impl {
}
}
forward_ref_binop! { impl BitAnd, bitand for Saturating<$t>, Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl BitAndAssign for Saturating<$t> {
#[inline]
fn bitand_assign(&mut self, other: Saturating<$t>) {
@@ -468,7 +471,7 @@ macro_rules! saturating_impl {
}
forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Saturating<$t>, Saturating<$t> }
- #[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
+ #[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
impl BitAndAssign<$t> for Saturating<$t> {
#[inline]
fn bitand_assign(&mut self, other: $t) {
@@ -492,12 +495,11 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(<Saturating<", stringify!($t), ">>::MIN, Saturating(", stringify!($t), "::MIN));")]
/// ```
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const MIN: Self = Self(<$t>::MIN);
/// Returns the largest value that can be represented by this integer type.
@@ -507,12 +509,11 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(<Saturating<", stringify!($t), ">>::MAX, Saturating(", stringify!($t), "::MAX));")]
/// ```
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const MAX: Self = Self(<$t>::MAX);
/// Returns the size of this integer type in bits.
@@ -522,12 +523,11 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(<Saturating<", stringify!($t), ">>::BITS, ", stringify!($t), "::BITS);")]
/// ```
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const BITS: u32 = <$t>::BITS;
/// Returns the number of ones in the binary representation of `self`.
@@ -537,7 +537,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(0b01001100", stringify!($t), ");")]
@@ -549,7 +548,8 @@ macro_rules! saturating_int_impl {
#[doc(alias = "popcnt")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn count_ones(self) -> u32 {
self.0.count_ones()
}
@@ -561,7 +561,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(Saturating(!0", stringify!($t), ").count_zeros(), 0);")]
@@ -569,7 +568,8 @@ macro_rules! saturating_int_impl {
#[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn count_zeros(self) -> u32 {
self.0.count_zeros()
}
@@ -581,7 +581,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(0b0101000", stringify!($t), ");")]
@@ -591,7 +590,8 @@ macro_rules! saturating_int_impl {
#[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn trailing_zeros(self) -> u32 {
self.0.trailing_zeros()
}
@@ -608,7 +608,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
/// let n: Saturating<i64> = Saturating(0x0123456789ABCDEF);
@@ -619,7 +618,8 @@ macro_rules! saturating_int_impl {
#[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn rotate_left(self, n: u32) -> Self {
Saturating(self.0.rotate_left(n))
}
@@ -636,7 +636,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
/// let n: Saturating<i64> = Saturating(0x0123456789ABCDEF);
@@ -647,7 +646,8 @@ macro_rules! saturating_int_impl {
#[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn rotate_right(self, n: u32) -> Self {
Saturating(self.0.rotate_right(n))
}
@@ -659,7 +659,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
/// let n: Saturating<i16> = Saturating(0b0000000_01010101);
@@ -673,7 +672,8 @@ macro_rules! saturating_int_impl {
#[inline]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn swap_bytes(self) -> Self {
Saturating(self.0.swap_bytes())
}
@@ -688,7 +688,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
/// let n = Saturating(0b0000000_01010101i16);
@@ -700,8 +699,8 @@ macro_rules! saturating_int_impl {
/// assert_eq!(m, Saturating(-22016));
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- #[rustc_const_unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn reverse_bits(self) -> Self {
@@ -718,7 +717,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(0x1A", stringify!($t), ");")]
@@ -731,7 +729,8 @@ macro_rules! saturating_int_impl {
/// ```
#[inline]
#[must_use]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn from_be(x: Self) -> Self {
Saturating(<$t>::from_be(x.0))
}
@@ -746,7 +745,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(0x1A", stringify!($t), ");")]
@@ -759,7 +757,8 @@ macro_rules! saturating_int_impl {
/// ```
#[inline]
#[must_use]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn from_le(x: Self) -> Self {
Saturating(<$t>::from_le(x.0))
}
@@ -774,7 +773,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(0x1A", stringify!($t), ");")]
@@ -786,7 +784,8 @@ macro_rules! saturating_int_impl {
/// }
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn to_be(self) -> Self {
@@ -803,7 +802,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(0x1A", stringify!($t), ");")]
@@ -815,7 +813,8 @@ macro_rules! saturating_int_impl {
/// }
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn to_le(self) -> Self {
@@ -829,7 +828,6 @@ macro_rules! saturating_int_impl {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(Saturating(3", stringify!($t), ").pow(4), Saturating(81));")]
@@ -838,17 +836,17 @@ macro_rules! saturating_int_impl {
/// Results that are too large are saturated:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
/// assert_eq!(Saturating(3i8).pow(5), Saturating(127));
/// assert_eq!(Saturating(3i8).pow(6), Saturating(127));
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- pub fn pow(self, exp: u32) -> Self {
+ pub const fn pow(self, exp: u32) -> Self {
Saturating(self.0.saturating_pow(exp))
}
}
@@ -867,7 +865,6 @@ macro_rules! saturating_int_impl_signed {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(", stringify!($t), "::MAX >> 2);")]
@@ -875,7 +872,8 @@ macro_rules! saturating_int_impl_signed {
/// assert_eq!(n.leading_zeros(), 3);
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn leading_zeros(self) -> u32 {
@@ -890,7 +888,6 @@ macro_rules! saturating_int_impl_signed {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(Saturating(100", stringify!($t), ").abs(), Saturating(100));")]
@@ -900,10 +897,11 @@ macro_rules! saturating_int_impl_signed {
#[doc = concat!("assert_eq!(Saturating(", stringify!($t), "::MIN).abs(), Saturating(", stringify!($t), "::MAX));")]
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- pub fn abs(self) -> Saturating<$t> {
+ pub const fn abs(self) -> Saturating<$t> {
Saturating(self.0.saturating_abs())
}
@@ -918,7 +916,6 @@ macro_rules! saturating_int_impl_signed {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert_eq!(Saturating(10", stringify!($t), ").signum(), Saturating(1));")]
@@ -926,10 +923,11 @@ macro_rules! saturating_int_impl_signed {
#[doc = concat!("assert_eq!(Saturating(-10", stringify!($t), ").signum(), Saturating(-1));")]
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
- pub fn signum(self) -> Saturating<$t> {
+ pub const fn signum(self) -> Saturating<$t> {
Saturating(self.0.signum())
}
@@ -941,7 +939,6 @@ macro_rules! saturating_int_impl_signed {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert!(Saturating(10", stringify!($t), ").is_positive());")]
@@ -949,7 +946,8 @@ macro_rules! saturating_int_impl_signed {
/// ```
#[must_use]
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn is_positive(self) -> bool {
self.0.is_positive()
}
@@ -962,7 +960,6 @@ macro_rules! saturating_int_impl_signed {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert!(Saturating(-10", stringify!($t), ").is_negative());")]
@@ -970,13 +967,14 @@ macro_rules! saturating_int_impl_signed {
/// ```
#[must_use]
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
pub const fn is_negative(self) -> bool {
self.0.is_negative()
}
}
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
impl Neg for Saturating<$t> {
type Output = Self;
#[inline]
@@ -985,7 +983,7 @@ macro_rules! saturating_int_impl_signed {
}
}
forward_ref_unop! { impl Neg, neg for Saturating<$t>,
- #[unstable(feature = "saturating_int_impl", issue = "87920")] }
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")] }
)*)
}
@@ -1001,7 +999,6 @@ macro_rules! saturating_int_impl_unsigned {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("let n = Saturating(", stringify!($t), "::MAX >> 2);")]
@@ -1009,7 +1006,8 @@ macro_rules! saturating_int_impl_unsigned {
/// assert_eq!(n.leading_zeros(), 2);
/// ```
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
pub const fn leading_zeros(self) -> u32 {
@@ -1023,7 +1021,6 @@ macro_rules! saturating_int_impl_unsigned {
/// Basic usage:
///
/// ```
- /// #![feature(saturating_int_impl)]
/// use std::num::Saturating;
///
#[doc = concat!("assert!(Saturating(16", stringify!($t), ").is_power_of_two());")]
@@ -1031,8 +1028,9 @@ macro_rules! saturating_int_impl_unsigned {
/// ```
#[must_use]
#[inline]
- #[unstable(feature = "saturating_int_impl", issue = "87920")]
- pub fn is_power_of_two(self) -> bool {
+ #[rustc_const_stable(feature = "saturating_int_impl", since = "1.74.0")]
+ #[stable(feature = "saturating_int_impl", since = "1.74.0")]
+ pub const fn is_power_of_two(self) -> bool {
self.0.is_power_of_two()
}