pub struct IMPLEMENTATION_SLOT { /* private fields */ }Methods from Deref<Target = SlotId>§
Sourcepub fn to_base_le(&self, base: u64) -> impl Iterator<Item = u64>
pub fn to_base_le(&self, base: u64) -> impl Iterator<Item = u64>
Returns an iterator over the base base digits of the number in
little-endian order.
Pro tip: instead of setting base = 10, set it to the highest
power of 10 that still fits u64. This way much fewer iterations
are required to extract all the digits.
§Panics
Panics if the base is less than 2.
Sourcepub fn to_base_be(&self, base: u64) -> impl Iterator<Item = u64>
pub fn to_base_be(&self, base: u64) -> impl Iterator<Item = u64>
Returns an iterator over the base base digits of the number in
big-endian order.
Pro tip: instead of setting base = 10, set it to the highest
power of 10 that still fits u64. This way much fewer iterations
are required to extract all the digits.
Use to_base_be_2 to extract the maximum number
of digits at once more efficiently.
§Panics
Panics if the base is less than 2.
§Examples
let n = ruint::aliases::U64::from(1234);
assert_eq!(n.to_base_be(10).collect::<Vec<_>>(), [1, 2, 3, 4]);
assert_eq!(n.to_base_be(1000000).collect::<Vec<_>>(), [1234]);
// `to_base_be_2` always returns digits maximally packed into `u64`s.
assert_eq!(n.to_base_be_2(10).collect::<Vec<_>>(), [1234]);
assert_eq!(n.to_base_be_2(1000000).collect::<Vec<_>>(), [1234]);Sourcepub fn to_base_be_2(&self, base: u64) -> impl Iterator<Item = u64>
pub fn to_base_be_2(&self, base: u64) -> impl Iterator<Item = u64>
Returns an iterator over the base base digits of the number in
big-endian order.
Always returns digits maximally packed into u64s.
Unlike to_base_be, this method:
- never heap-allocates memory, so it’s always faster
- always returns digits maximally packed into
u64s, so passing the constant base like2,8, instead of the highest power that fits in u64 is not needed
§Panics
Panics if the base is less than 2.
§Examples
See to_base_be.
Sourcepub fn bit(&self, index: usize) -> bool
pub fn bit(&self, index: usize) -> bool
Returns whether a specific bit is set.
Returns false if index exceeds the bit width of the number.
Sourcepub fn byte(&self, index: usize) -> u8
pub fn byte(&self, index: usize) -> u8
Returns a specific byte. The byte at index 0 is the least significant
byte (little endian).
§Panics
Panics if index is greater than or equal to the byte width of the
number.
§Examples
let x = uint!(0x1234567890_U64);
let bytes = [
x.byte(0), // 0x90
x.byte(1), // 0x78
x.byte(2), // 0x56
x.byte(3), // 0x34
x.byte(4), // 0x12
x.byte(5), // 0x00
x.byte(6), // 0x00
x.byte(7), // 0x00
];
assert_eq!(bytes, x.to_le_bytes());Panics if out of range.
let x = uint!(0x1234567890_U64);
let _ = x.byte(8);Sourcepub fn checked_byte(&self, index: usize) -> Option<u8>
pub fn checked_byte(&self, index: usize) -> Option<u8>
Returns a specific byte, or None if index is out of range. The byte
at index 0 is the least significant byte (little endian).
§Examples
let x = uint!(0x1234567890_U64);
assert_eq!(x.checked_byte(0), Some(0x90));
assert_eq!(x.checked_byte(7), Some(0x00));
// Out of range
assert_eq!(x.checked_byte(8), None);Sourcepub fn leading_zeros(&self) -> usize
pub fn leading_zeros(&self) -> usize
Returns the number of leading zeros in the binary representation of
self.
Sourcepub fn leading_ones(&self) -> usize
pub fn leading_ones(&self) -> usize
Returns the number of leading ones in the binary representation of
self.
Sourcepub fn trailing_zeros(&self) -> usize
pub fn trailing_zeros(&self) -> usize
Returns the number of trailing zeros in the binary representation of
self.
Sourcepub fn trailing_ones(&self) -> usize
pub fn trailing_ones(&self) -> usize
Returns the number of trailing ones in the binary representation of
self.
Sourcepub fn count_ones(&self) -> usize
pub fn count_ones(&self) -> usize
Returns the number of ones in the binary representation of self.
Sourcepub fn count_zeros(&self) -> usize
pub fn count_zeros(&self) -> usize
Returns the number of zeros in the binary representation of self.
Sourcepub fn bit_len(&self) -> usize
pub fn bit_len(&self) -> usize
Returns the dynamic length of this number in bits, ignoring leading zeros.
For the maximum length of the type, use Uint::BITS.
Sourcepub fn byte_len(&self) -> usize
pub fn byte_len(&self) -> usize
Returns the dynamic length of this number in bytes, ignoring leading zeros.
For the maximum length of the type, use Uint::BYTES.
Sourcepub fn most_significant_bits(&self) -> (u64, usize)
pub fn most_significant_bits(&self) -> (u64, usize)
Returns the most significant 64 bits of the number and the exponent.
Given return value $(\mathtt{bits}, \mathtt{exponent})$, the self can
be approximated as
$$ \mathtt{self} ≈ \mathtt{bits} ⋅ 2^\mathtt{exponent} $$
If self is $<≥> 2^{63}$, then exponent will be zero and bits will
have leading zeros.
pub const BYTES: usize
Sourcepub fn as_le_slice(&self) -> &[u8] ⓘ
pub fn as_le_slice(&self) -> &[u8] ⓘ
Access the underlying store as a little-endian slice of bytes.
Only available on little-endian targets.
If BITS does not evenly divide 8, it is padded with zero bits in the
most significant position.
Sourcepub fn as_le_bytes(&self) -> Cow<'_, [u8]>
pub fn as_le_bytes(&self) -> Cow<'_, [u8]>
Access the underlying store as a little-endian bytes.
Uses an optimized implementation on little-endian targets.
Sourcepub fn as_le_bytes_trimmed(&self) -> Cow<'_, [u8]>
pub fn as_le_bytes_trimmed(&self) -> Cow<'_, [u8]>
Access the underlying store as a little-endian bytes with trailing zeros removed.
Uses an optimized implementation on little-endian targets.
Sourcepub fn to_le_bytes<const BYTES: usize>(&self) -> [u8; BYTES]
pub fn to_le_bytes<const BYTES: usize>(&self) -> [u8; BYTES]
Converts the Uint to a little-endian byte array of size exactly
Self::BYTES.
§Panics
Panics if the generic parameter BYTES is not exactly Self::BYTES.
Ideally this would be a compile time error, but this is blocked by
Rust issue #60551.
Sourcepub fn to_le_bytes_vec(&self) -> Vec<u8> ⓘ
pub fn to_le_bytes_vec(&self) -> Vec<u8> ⓘ
Converts the Uint to a little-endian byte vector of size exactly
Self::BYTES.
This method is useful when Self::to_le_bytes can not be used because
byte size is not known compile time.
Sourcepub fn to_le_bytes_trimmed_vec(&self) -> Vec<u8> ⓘ
pub fn to_le_bytes_trimmed_vec(&self) -> Vec<u8> ⓘ
Converts the Uint to a little-endian byte vector with trailing zeros
bytes removed.
Sourcepub fn to_be_bytes<const BYTES: usize>(&self) -> [u8; BYTES]
pub fn to_be_bytes<const BYTES: usize>(&self) -> [u8; BYTES]
Converts the Uint to a big-endian byte array of size exactly
Self::BYTES.
§Panics
Panics if the generic parameter BYTES is not exactly Self::BYTES.
Ideally this would be a compile time error, but this is blocked by
Rust issue #60551.
Sourcepub fn to_be_bytes_vec(&self) -> Vec<u8> ⓘ
pub fn to_be_bytes_vec(&self) -> Vec<u8> ⓘ
Converts the Uint to a big-endian byte vector of size exactly
Self::BYTES.
This method is useful when Self::to_be_bytes can not be used because
byte size is not known compile time.
Sourcepub fn to_be_bytes_trimmed_vec(&self) -> Vec<u8> ⓘ
pub fn to_be_bytes_trimmed_vec(&self) -> Vec<u8> ⓘ
Converts the Uint to a big-endian byte vector with leading zeros
bytes removed.
Sourcepub fn copy_le_bytes_to(&self, buf: &mut [u8]) -> usize
pub fn copy_le_bytes_to(&self, buf: &mut [u8]) -> usize
Writes the little-endian representation of the Uint to the given
buffer. The buffer must be large enough to hold Self::BYTES bytes.
§Panics
Panics if the buffer is not large enough to hold Self::BYTES bytes.
§Returns
The number of bytes written to the buffer (always equal to
Self::BYTES, but often useful to make explicit for encoders).
Sourcepub fn checked_copy_le_bytes_to(&self, buf: &mut [u8]) -> Option<usize>
pub fn checked_copy_le_bytes_to(&self, buf: &mut [u8]) -> Option<usize>
Writes the little-endian representation of the Uint to the given
buffer. The buffer must be large enough to hold Self::BYTES bytes.
§Returns
None, if the buffer is not large enough to hold Self::BYTES
bytes, and does not modify the buffer.
Some with the number of bytes written to the buffer (always
equal to Self::BYTES, but often useful to make explicit for
encoders).
Sourcepub fn copy_be_bytes_to(&self, buf: &mut [u8]) -> usize
pub fn copy_be_bytes_to(&self, buf: &mut [u8]) -> usize
Writes the big-endian representation of the Uint to the given
buffer. The buffer must be large enough to hold Self::BYTES bytes.
§Panics
Panics if the buffer is not large enough to hold Self::BYTES bytes.
§Returns
The number of bytes written to the buffer (always equal to
Self::BYTES, but often useful to make explicit for encoders).
Sourcepub fn checked_copy_be_bytes_to(&self, buf: &mut [u8]) -> Option<usize>
pub fn checked_copy_be_bytes_to(&self, buf: &mut [u8]) -> Option<usize>
Writes the big-endian representation of the Uint to the given
buffer. The buffer must be large enough to hold Self::BYTES bytes.
§Returns
None, if the buffer is not large enough to hold Self::BYTES
bytes, and does not modify the buffer.
Some with the number of bytes written to the buffer (always
equal to Self::BYTES, but often useful to make explicit for
encoders).
Sourcepub fn const_is_zero(&self) -> bool
pub fn const_is_zero(&self) -> bool
Returns true if the value is zero.
Note that this currently might perform worse than
is_zero.
Sourcepub fn const_eq(&self, other: &Uint<BITS, LIMBS>) -> bool
pub fn const_eq(&self, other: &Uint<BITS, LIMBS>) -> bool
Returns true if self equals other.
Note that this currently might perform worse than the derived
PartialEq (== operator).
Sourcepub fn wrapping_to<T>(&self) -> T
pub fn wrapping_to<T>(&self) -> T
§Examples
assert_eq!(300_U12.wrapping_to::<i8>(), 44_i8);
assert_eq!(255_U32.wrapping_to::<i8>(), -1_i8);
assert_eq!(0x1337cafec0d3_U256.wrapping_to::<U32>(), 0xcafec0d3_U32);Sourcepub fn saturating_to<T>(&self) -> T
pub fn saturating_to<T>(&self) -> T
§Examples
assert_eq!(300_U12.saturating_to::<i16>(), 300_i16);
assert_eq!(255_U32.saturating_to::<i8>(), 127);
assert_eq!(0x1337cafec0d3_U256.saturating_to::<U32>(), U32::MAX);pub const LIMBS: usize
pub const MASK: u64
pub const BITS: usize = BITS
pub const ZERO: Uint<BITS, LIMBS>
pub const ONE: Uint<BITS, LIMBS>
pub const MIN: Uint<BITS, LIMBS> = Self::ZERO
pub const MAX: Uint<BITS, LIMBS>
Trait Implementations§
Source§impl Deref for IMPLEMENTATION_SLOT
impl Deref for IMPLEMENTATION_SLOT
impl LazyStatic for IMPLEMENTATION_SLOT
Auto Trait Implementations§
impl Freeze for IMPLEMENTATION_SLOT
impl RefUnwindSafe for IMPLEMENTATION_SLOT
impl Send for IMPLEMENTATION_SLOT
impl Sync for IMPLEMENTATION_SLOT
impl Unpin for IMPLEMENTATION_SLOT
impl UnwindSafe for IMPLEMENTATION_SLOT
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.