pub trait Integer:
Number
+ Eq
+ Ord
+ BitAnd<Output = Self>
+ BitAndAssign
+ BitOr<Output = Self>
+ BitOrAssign
+ BitXor<Output = Self>
+ BitXorAssign
+ Not<Output = Self>
+ Shl<Self, Output = Self>
+ Shl<i32, Output = Self>
+ ShlAssign<i32>
+ Shr<i32, Output = Self>
+ ShrAssign<i32> {
const ZERO: Self;
const ONE: Self;
const TWO: Self;
const MAX: Self;
const MIN: Self;
const BITS: usize;
Show 25 methods
// Required methods
fn leading_zeros(self) -> u32;
fn trailing_zeros(self) -> u32;
fn pow(self, exp: u32) -> Self;
fn checked_pow(self, exp: u32) -> Option<Self>;
fn overflowing_pow(self, exp: u32) -> (Self, bool);
fn checked_add(self, i: Self) -> Option<Self>;
fn checked_sub(self, i: Self) -> Option<Self>;
fn checked_mul(self, i: Self) -> Option<Self>;
fn overflowing_add(self, i: Self) -> (Self, bool);
fn overflowing_sub(self, i: Self) -> (Self, bool);
fn overflowing_mul(self, i: Self) -> (Self, bool);
fn wrapping_add(self, i: Self) -> Self;
fn wrapping_sub(self, i: Self) -> Self;
fn wrapping_mul(self, i: Self) -> Self;
fn wrapping_neg(self) -> Self;
fn saturating_add(self, i: Self) -> Self;
fn saturating_sub(self, i: Self) -> Self;
fn saturating_mul(self, i: Self) -> Self;
// Provided methods
fn ceil_divmod(self, y: Self) -> (Self, i32) { ... }
fn ceil_div(self, y: Self) -> Self { ... }
fn ceil_mod(self, y: Self) -> i32 { ... }
fn bit_length(self) -> u32 { ... }
fn is_odd(self) -> bool { ... }
fn is_even(self) -> bool { ... }
fn overflow_digits(radix: u32) -> usize { ... }
}
Expand description
The base trait for all signed and unsigned integers
.
Required Associated Constants§
Required Methods§
Sourcefn leading_zeros(self) -> u32
fn leading_zeros(self) -> u32
Returns the number of leading zeros in the binary representation
of self
.
See u32::leading_zeros
.
Sourcefn trailing_zeros(self) -> u32
fn trailing_zeros(self) -> u32
Returns the number of trailing zeros in the binary representation
of self
.
See u32::trailing_zeros
.
Sourcefn pow(self, exp: u32) -> Self
fn pow(self, exp: u32) -> Self
Raises self to the power of exp
, using exponentiation by squaring.
See u32::pow
.
Sourcefn checked_pow(self, exp: u32) -> Option<Self>
fn checked_pow(self, exp: u32) -> Option<Self>
Checked exponentiation. Computes self.pow(exp)
, returning
None
if overflow occurred.
See u32::checked_pow
.
Sourcefn overflowing_pow(self, exp: u32) -> (Self, bool)
fn overflowing_pow(self, exp: u32) -> (Self, bool)
Raises self to the power of exp
, using exponentiation by squaring.
Returns a tuple of the exponentiation along with a bool indicating whether an overflow happened.
See u32::overflowing_pow
.
Sourcefn checked_add(self, i: Self) -> Option<Self>
fn checked_add(self, i: Self) -> Option<Self>
Checked integer addition. Computes self + i
, returning None
if
overflow occurred.
See u32::checked_add
.
Sourcefn checked_sub(self, i: Self) -> Option<Self>
fn checked_sub(self, i: Self) -> Option<Self>
Checked integer subtraction. Computes self - i
, returning None
if overflow occurred.
See u32::checked_sub
.
Sourcefn checked_mul(self, i: Self) -> Option<Self>
fn checked_mul(self, i: Self) -> Option<Self>
Checked integer multiplication. Computes self * rhs
, returning None
if overflow occurred.
See u32::checked_mul
.
Sourcefn overflowing_add(self, i: Self) -> (Self, bool)
fn overflowing_add(self, i: Self) -> (Self, bool)
Calculates self + i
.
Returns a tuple of the addition along with a boolean indicating whether
an arithmetic overflow would occur. If an overflow would have occurred
then the wrapped value is returned. See u32::overflowing_add
.
Sourcefn overflowing_sub(self, i: Self) -> (Self, bool)
fn overflowing_sub(self, i: Self) -> (Self, bool)
Calculates self - i
.
Returns a tuple of the addition along with a boolean indicating whether
an arithmetic overflow would occur. If an overflow would have occurred
then the wrapped value is returned. See u32::overflowing_sub
.
Sourcefn overflowing_mul(self, i: Self) -> (Self, bool)
fn overflowing_mul(self, i: Self) -> (Self, bool)
Calculates self * i
.
Returns a tuple of the addition along with a boolean indicating whether
an arithmetic overflow would occur. If an overflow would have occurred
then the wrapped value is returned. See u32::overflowing_mul
.
Sourcefn wrapping_add(self, i: Self) -> Self
fn wrapping_add(self, i: Self) -> Self
Wrapping (modular) addition. Computes self + i
, wrapping around at
the boundary of the type.
See u32::wrapping_add
.
Sourcefn wrapping_sub(self, i: Self) -> Self
fn wrapping_sub(self, i: Self) -> Self
Wrapping (modular) subtraction. Computes self - i
, wrapping around at
the boundary of the type.
See u32::wrapping_sub
.
Sourcefn wrapping_mul(self, i: Self) -> Self
fn wrapping_mul(self, i: Self) -> Self
Wrapping (modular) multiplication. Computes self * i
, wrapping around at
the boundary of the type.
See u32::wrapping_mul
.
Sourcefn wrapping_neg(self) -> Self
fn wrapping_neg(self) -> Self
Wrapping (modular) negation. Computes -self
, wrapping around at
the boundary of the type.
See u32::wrapping_neg
.
Sourcefn saturating_add(self, i: Self) -> Self
fn saturating_add(self, i: Self) -> Self
Saturating integer addition. Computes self + i
, saturating at the
numeric bounds instead of overflowing.
See u32::saturating_add
.
Sourcefn saturating_sub(self, i: Self) -> Self
fn saturating_sub(self, i: Self) -> Self
Saturating integer subtraction. Computes self - i
, saturating at the
numeric bounds instead of overflowing.
See u32::saturating_sub
.
Sourcefn saturating_mul(self, i: Self) -> Self
fn saturating_mul(self, i: Self) -> Self
Saturating integer multiplication. Computes self * i
, saturating at
the numeric bounds instead of overflowing.
See u32::saturating_mul
.
Provided Methods§
Sourcefn ceil_divmod(self, y: Self) -> (Self, i32)
fn ceil_divmod(self, y: Self) -> (Self, i32)
Get the fast ceiling of the quotient from integer division.
The remainder may wrap to the numerical boundaries for the type.
See u32::div_ceil
.
§Examples
use lexical_util::num::Integer;
assert_eq!(250u16.ceil_divmod(10), (25, 0));
assert_eq!(256u16.ceil_divmod(10), (26, -4));
assert_eq!(i32::MAX.ceil_divmod(-2), (-0x3FFFFFFE, 3));
// notice how `-1` wraps since `i32` cannot hold `i128::MAX`.
assert_eq!((i128::MAX - 1).ceil_divmod(i128::MAX), (1, -1));
Sourcefn ceil_div(self, y: Self) -> Self
fn ceil_div(self, y: Self) -> Self
Get the fast ceiling of the quotient from integer division.
This is identical to u32::div_ceil
.
§Examples
use lexical_util::num::Integer;
assert_eq!(250u16.ceil_div(10), 25);
assert_eq!(256u16.ceil_div(10), 26);
assert_eq!(i32::MAX.ceil_div(-2), -0x3FFFFFFE);
assert_eq!((i128::MAX - 1).ceil_div(i128::MAX), 1);
Sourcefn ceil_mod(self, y: Self) -> i32
fn ceil_mod(self, y: Self) -> i32
Get the fast ceiling modulus from integer division.
The remainder is not guaranteed to be valid since it can
overflow if the remainder is not 0. See Self::ceil_divmod
.
§Examples
use lexical_util::num::Integer;
assert_eq!(250u16.ceil_mod(10), 0);
assert_eq!(256u16.ceil_mod(10), -4);
assert_eq!(i32::MAX.ceil_mod(-2), 3);
// notice how `-1` wraps since `i32` cannot hold `i128::MAX`.
assert_eq!((i128::MAX - 1).ceil_mod(i128::MAX), -1);
Sourcefn bit_length(self) -> u32
fn bit_length(self) -> u32
Get the number of bits in a value.
§Examples
use lexical_util::num::Integer;
assert_eq!(1u64.bit_length(), 1);
assert_eq!(2u64.bit_length(), 2);
assert_eq!(3u64.bit_length(), 2);
assert_eq!(16u64.bit_length(), 5);
Sourcefn overflow_digits(radix: u32) -> usize
fn overflow_digits(radix: u32) -> usize
Get the maximum number of digits before the slice will overflow.
This is effectively the floor(log(2^BITS-1, radix))
, but we can
try to go a bit lower without worrying too much.
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.