diff options
| author | Falk Hüffner <falk@hueffner.de> | 2021-09-05 17:09:21 +0200 |
|---|---|---|
| committer | Falk Hüffner <falk@hueffner.de> | 2021-09-05 17:09:21 +0200 |
| commit | d760c3318391dbaf215f40e53de09a2ce2d2e253 (patch) | |
| tree | 4a092b6114119560315f17e21bfe7e1952cc57b5 /library/core/src/num | |
| parent | 7e1e3eb5e19c7d1a4eabe4da22bf2aa085772766 (diff) | |
| download | rust-d760c3318391dbaf215f40e53de09a2ce2d2e253.tar.gz rust-d760c3318391dbaf215f40e53de09a2ce2d2e253.zip | |
Change return type for T::{log,log2,log10} to u32. The value is at
most 128, and this is consistent with using u32 for small values elsewhere (e.g. BITS, count_ones, leading_zeros).
Diffstat (limited to 'library/core/src/num')
| -rw-r--r-- | library/core/src/num/int_log10.rs | 4 | ||||
| -rw-r--r-- | library/core/src/num/int_macros.rs | 19 | ||||
| -rw-r--r-- | library/core/src/num/uint_macros.rs | 19 |
3 files changed, 18 insertions, 24 deletions
diff --git a/library/core/src/num/int_log10.rs b/library/core/src/num/int_log10.rs index a23ca51ef87..e4599067f85 100644 --- a/library/core/src/num/int_log10.rs +++ b/library/core/src/num/int_log10.rs @@ -116,8 +116,8 @@ mod unchecked { macro_rules! impl_checked { ($T:ident) => { - pub const fn $T(val: $T) -> Option<$T> { - if val > 0 { Some(unchecked::$T(val) as $T) } else { None } + pub const fn $T(val: $T) -> Option<u32> { + if val > 0 { Some(unchecked::$T(val)) } else { None } } }; } diff --git a/library/core/src/num/int_macros.rs b/library/core/src/num/int_macros.rs index 780d6c34c91..77643290cc4 100644 --- a/library/core/src/num/int_macros.rs +++ b/library/core/src/num/int_macros.rs @@ -2026,7 +2026,7 @@ macro_rules! int_impl { #[track_caller] #[rustc_inherit_overflow_checks] #[allow(arithmetic_overflow)] - pub const fn log(self, base: Self) -> Self { + pub const fn log(self, base: Self) -> u32 { match self.checked_log(base) { Some(n) => n, None => { @@ -2060,7 +2060,7 @@ macro_rules! int_impl { #[track_caller] #[rustc_inherit_overflow_checks] #[allow(arithmetic_overflow)] - pub const fn log2(self) -> Self { + pub const fn log2(self) -> u32 { match self.checked_log2() { Some(n) => n, None => { @@ -2094,7 +2094,7 @@ macro_rules! int_impl { #[track_caller] #[rustc_inherit_overflow_checks] #[allow(arithmetic_overflow)] - pub const fn log10(self) -> Self { + pub const fn log10(self) -> u32 { match self.checked_log10() { Some(n) => n, None => { @@ -2125,7 +2125,7 @@ macro_rules! int_impl { #[must_use = "this returns the result of the operation, \ without modifying the original"] #[inline] - pub const fn checked_log(self, base: Self) -> Option<Self> { + pub const fn checked_log(self, base: Self) -> Option<u32> { if self <= 0 || base <= 1 { None } else { @@ -2161,12 +2161,12 @@ macro_rules! int_impl { #[must_use = "this returns the result of the operation, \ without modifying the original"] #[inline] - pub const fn checked_log2(self) -> Option<Self> { + pub const fn checked_log2(self) -> Option<u32> { if self <= 0 { None } else { // SAFETY: We just checked that this number is positive - let log = (Self::BITS - 1) as Self - unsafe { intrinsics::ctlz_nonzero(self) }; + let log = (Self::BITS - 1) - unsafe { intrinsics::ctlz_nonzero(self) as u32 }; Some(log) } } @@ -2185,11 +2185,8 @@ macro_rules! int_impl { #[must_use = "this returns the result of the operation, \ without modifying the original"] #[inline] - pub const fn checked_log10(self) -> Option<Self> { - match int_log10::$ActualT(self as $ActualT) { - Some(s) => Some(s as Self), - None => None, - } + pub const fn checked_log10(self) -> Option<u32> { + int_log10::$ActualT(self as $ActualT) } /// Computes the absolute value of `self`. diff --git a/library/core/src/num/uint_macros.rs b/library/core/src/num/uint_macros.rs index 02a5ed4ca80..46e64c33b84 100644 --- a/library/core/src/num/uint_macros.rs +++ b/library/core/src/num/uint_macros.rs @@ -660,7 +660,7 @@ macro_rules! uint_impl { #[track_caller] #[rustc_inherit_overflow_checks] #[allow(arithmetic_overflow)] - pub const fn log(self, base: Self) -> Self { + pub const fn log(self, base: Self) -> u32 { match self.checked_log(base) { Some(n) => n, None => { @@ -694,7 +694,7 @@ macro_rules! uint_impl { #[track_caller] #[rustc_inherit_overflow_checks] #[allow(arithmetic_overflow)] - pub const fn log2(self) -> Self { + pub const fn log2(self) -> u32 { match self.checked_log2() { Some(n) => n, None => { @@ -728,7 +728,7 @@ macro_rules! uint_impl { #[track_caller] #[rustc_inherit_overflow_checks] #[allow(arithmetic_overflow)] - pub const fn log10(self) -> Self { + pub const fn log10(self) -> u32 { match self.checked_log10() { Some(n) => n, None => { @@ -759,7 +759,7 @@ macro_rules! uint_impl { #[must_use = "this returns the result of the operation, \ without modifying the original"] #[inline] - pub const fn checked_log(self, base: Self) -> Option<Self> { + pub const fn checked_log(self, base: Self) -> Option<u32> { if self <= 0 || base <= 1 { None } else { @@ -795,12 +795,12 @@ macro_rules! uint_impl { #[must_use = "this returns the result of the operation, \ without modifying the original"] #[inline] - pub const fn checked_log2(self) -> Option<Self> { + pub const fn checked_log2(self) -> Option<u32> { if self <= 0 { None } else { // SAFETY: We just checked that this number is positive - let log = (Self::BITS - 1) as Self - unsafe { intrinsics::ctlz_nonzero(self) }; + let log = (Self::BITS - 1) - unsafe { intrinsics::ctlz_nonzero(self) as u32 }; Some(log) } } @@ -819,11 +819,8 @@ macro_rules! uint_impl { #[must_use = "this returns the result of the operation, \ without modifying the original"] #[inline] - pub const fn checked_log10(self) -> Option<Self> { - match int_log10::$ActualT(self as $ActualT) { - Some(s) => Some(s as Self), - None => None, - } + pub const fn checked_log10(self) -> Option<u32> { + int_log10::$ActualT(self as $ActualT) } /// Checked negation. Computes `-self`, returning `None` unless `self == |
