PrimitiveUnsigned

Trait PrimitiveUnsigned 

Source
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§

Source

type Signed: PrimitiveSigned

The signed integer type used by methods like checked_add_signed.

Required Methods§

Source

fn abs_diff(self, other: Self) -> Self

Computes the absolute difference between self and other.

Source

fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>

Checked addition with a signed integer. Computes self + rhs, returning None if overflow occurred.

Source

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.

Source

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.

Source

fn div_ceil(self, rhs: Self) -> Self

Calculates the quotient of self and rhs, rounding the result towards positive infinity.

Source

fn is_power_of_two(self) -> bool

Returns true if and only if self == 2^k for some k.

Source

fn midpoint(self, other: Self) -> Self

Calculates the middle point of self and other.

Source

fn next_multiple_of(self, rhs: Self) -> Self

Calculates the smallest value greater than or equal to self that is a multiple of rhs.

Source

fn next_power_of_two(self) -> Self

Returns the smallest power of two greater than or equal to self.

Source

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.

Source

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.

Source

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.

Implementations on Foreign Types§

Source§

impl PrimitiveUnsigned for u8

Source§

type Signed = i8

Source§

fn abs_diff(self, other: Self) -> Self

Source§

fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>

Source§

fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>

Source§

fn checked_next_power_of_two(self) -> Option<Self>

Source§

fn div_ceil(self, rhs: Self) -> Self

Source§

fn is_power_of_two(self) -> bool

Source§

fn midpoint(self, other: Self) -> Self

Source§

fn next_multiple_of(self, rhs: Self) -> Self

Source§

fn next_power_of_two(self) -> Self

Source§

fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)

Source§

fn saturating_add_signed(self, rhs: Self::Signed) -> Self

Source§

fn wrapping_add_signed(self, rhs: Self::Signed) -> Self

Source§

impl PrimitiveUnsigned for u16

Source§

type Signed = i16

Source§

fn abs_diff(self, other: Self) -> Self

Source§

fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>

Source§

fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>

Source§

fn checked_next_power_of_two(self) -> Option<Self>

Source§

fn div_ceil(self, rhs: Self) -> Self

Source§

fn is_power_of_two(self) -> bool

Source§

fn midpoint(self, other: Self) -> Self

Source§

fn next_multiple_of(self, rhs: Self) -> Self

Source§

fn next_power_of_two(self) -> Self

Source§

fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)

Source§

fn saturating_add_signed(self, rhs: Self::Signed) -> Self

Source§

fn wrapping_add_signed(self, rhs: Self::Signed) -> Self

Source§

impl PrimitiveUnsigned for u32

Source§

type Signed = i32

Source§

fn abs_diff(self, other: Self) -> Self

Source§

fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>

Source§

fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>

Source§

fn checked_next_power_of_two(self) -> Option<Self>

Source§

fn div_ceil(self, rhs: Self) -> Self

Source§

fn is_power_of_two(self) -> bool

Source§

fn midpoint(self, other: Self) -> Self

Source§

fn next_multiple_of(self, rhs: Self) -> Self

Source§

fn next_power_of_two(self) -> Self

Source§

fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)

Source§

fn saturating_add_signed(self, rhs: Self::Signed) -> Self

Source§

fn wrapping_add_signed(self, rhs: Self::Signed) -> Self

Source§

impl PrimitiveUnsigned for u64

Source§

type Signed = i64

Source§

fn abs_diff(self, other: Self) -> Self

Source§

fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>

Source§

fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>

Source§

fn checked_next_power_of_two(self) -> Option<Self>

Source§

fn div_ceil(self, rhs: Self) -> Self

Source§

fn is_power_of_two(self) -> bool

Source§

fn midpoint(self, other: Self) -> Self

Source§

fn next_multiple_of(self, rhs: Self) -> Self

Source§

fn next_power_of_two(self) -> Self

Source§

fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)

Source§

fn saturating_add_signed(self, rhs: Self::Signed) -> Self

Source§

fn wrapping_add_signed(self, rhs: Self::Signed) -> Self

Source§

impl PrimitiveUnsigned for u128

Source§

type Signed = i128

Source§

fn abs_diff(self, other: Self) -> Self

Source§

fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>

Source§

fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>

Source§

fn checked_next_power_of_two(self) -> Option<Self>

Source§

fn div_ceil(self, rhs: Self) -> Self

Source§

fn is_power_of_two(self) -> bool

Source§

fn midpoint(self, other: Self) -> Self

Source§

fn next_multiple_of(self, rhs: Self) -> Self

Source§

fn next_power_of_two(self) -> Self

Source§

fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)

Source§

fn saturating_add_signed(self, rhs: Self::Signed) -> Self

Source§

fn wrapping_add_signed(self, rhs: Self::Signed) -> Self

Source§

impl PrimitiveUnsigned for usize

Source§

type Signed = isize

Source§

fn abs_diff(self, other: Self) -> Self

Source§

fn checked_add_signed(self, rhs: Self::Signed) -> Option<Self>

Source§

fn checked_next_multiple_of(self, rhs: Self) -> Option<Self>

Source§

fn checked_next_power_of_two(self) -> Option<Self>

Source§

fn div_ceil(self, rhs: Self) -> Self

Source§

fn is_power_of_two(self) -> bool

Source§

fn midpoint(self, other: Self) -> Self

Source§

fn next_multiple_of(self, rhs: Self) -> Self

Source§

fn next_power_of_two(self) -> Self

Source§

fn overflowing_add_signed(self, rhs: Self::Signed) -> (Self, bool)

Source§

fn saturating_add_signed(self, rhs: Self::Signed) -> Self

Source§

fn wrapping_add_signed(self, rhs: Self::Signed) -> Self

Implementors§