pub trait PrimitiveUnsigned: PrimitiveInteger + From<u8> {
type Signed: PrimitiveSigned;
// Required methods
fn abs_diff(self, other: Self) -> Self;
fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>;
fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>;
fn checked_next_power_of_two(self) -> Option<Self>;
fn div_ceil(self, rhs: Self) -> Self;
fn is_power_of_two(self) -> bool;
fn midpoint(self, other: Self) -> Self;
fn next_multiple_of(self, rhs: Self) -> Self;
fn next_power_of_two(self) -> Self;
fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool);
fn saturating_add_signed(self, rhs: Self::Signed) -> Self;
fn wrapping_add_signed(self, rhs: Self::Signed) -> Self;
}Expand description
Trait for all primitive unsigned integer types, including the supertraits
PrimitiveInteger and PrimitiveNumber.
This encapsulates trait implementations and inherent methods that are common among all of the
primitive unsigned integer types: u8, u16, u32, u64, u128, and usize.
See the corresponding items on the individual types for more documentation and examples.
This trait is sealed with a private trait to prevent downstream implementations, so we may continue to expand along with the standard library without worrying about breaking changes for implementors.
§Examples
use num_primitive::PrimitiveUnsigned;
// Greatest Common Divisor (Euclidean algorithm)
fn gcd<T: PrimitiveUnsigned>(mut a: T, mut b: T) -> T {
let zero = T::from(0u8);
while b != zero {
(a, b) = (b, a % b);
}
a
}
assert_eq!(gcd::<u8>(48, 18), 6);
assert_eq!(gcd::<u16>(1071, 462), 21);
assert_eq!(gcd::<u32>(6_700_417, 2_147_483_647), 1);Required Associated Types§
Sourcetype Signed: PrimitiveSigned
type Signed: PrimitiveSigned
The signed integer type used by methods like
checked_add_signed.
Required Methods§
Sourcefn abs_diff(self, other: Self) -> Self
fn abs_diff(self, other: Self) -> Self
Computes the absolute difference between self and other.
Sourcefn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>
fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>
Checked addition with a signed integer. Computes self + rhs, returning None if overflow
occurred.
Sourcefn checked_next_multiple_of(self, rhs: Self) -> Option<Self>
fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>
Calculates the smallest value greater than or equal to self that is a multiple of rhs.
Returns None if rhs is zero or the operation would result in overflow.
Sourcefn checked_next_power_of_two(self) -> Option<Self>
fn checked_next_power_of_two(self) -> Option<Self>
Returns the smallest power of two greater than or equal to self. If the next power of two
is greater than the type’s maximum value, None is returned, otherwise the power of two is
wrapped in Some.
Sourcefn div_ceil(self, rhs: Self) -> Self
fn div_ceil(self, rhs: Self) -> Self
Calculates the quotient of self and rhs, rounding the result towards positive infinity.
Sourcefn is_power_of_two(self) -> bool
fn is_power_of_two(self) -> bool
Returns true if and only if self == 2^k for some k.
Sourcefn next_multiple_of(self, rhs: Self) -> Self
fn next_multiple_of(self, rhs: Self) -> Self
Calculates the smallest value greater than or equal to self that is a multiple of rhs.
Sourcefn next_power_of_two(self) -> Self
fn next_power_of_two(self) -> Self
Returns the smallest power of two greater than or equal to self.
Sourcefn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)
fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)
Calculates self + rhs with a signed rhs. Returns a tuple of the addition along with a
boolean indicating whether an arithmetic overflow would occur.
Sourcefn saturating_add_signed(self, rhs: Self::Signed) -> Self
fn saturating_add_signed(self, rhs: Self::Signed) -> Self
Saturating addition with a signed integer. Computes self + rhs, saturating at the numeric
bounds instead of overflowing.
Sourcefn wrapping_add_signed(self, rhs: Self::Signed) -> Self
fn wrapping_add_signed(self, rhs: Self::Signed) -> Self
Wrapping (modular) addition with a signed integer. Computes self + rhs, wrapping around
at the boundary of the type.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.