Struct typenum::uint::UInt [−][src]
UInt
is defined recursively, where B
is the least significant bit and U
is the rest
of the number. Conceptually, U
should be bound by the trait Unsigned
and B
should
be bound by the trait Bit
, but enforcing these bounds causes linear instead of
logrithmic scaling in some places, so they are left off for now. They may be enforced in
future.
In order to keep numbers unique, leading zeros are not allowed, so UInt<UTerm, B0>
is
forbidden.
Example
use typenum::{UInt, UTerm, B0, B1}; type U6 = UInt<UInt<UInt<UTerm, B1>, B1>, B0>;
Implementations
impl<U: Unsigned, B: Bit> UInt<U, B>
[src][−]
Trait Implementations
impl<U: Unsigned, B: Bit> Add<B0> for UInt<U, B>
[src][+]
impl<U: Unsigned> Add<B1> for UInt<U, B0>
[src][+]
impl<U: Unsigned> Add<B1> for UInt<U, B1> where
U: Add<B1>,
Add1<U>: Unsigned,
[src][+]
U: Add<B1>,
Add1<U>: Unsigned,
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B0>> for UInt<Ul, B0> where
Ul: Add<Ur>,
[src][+]
Ul: Add<Ur>,
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B0>> for UInt<Ul, B1> where
Ul: Add<Ur>,
[src][+]
Ul: Add<Ur>,
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B1>> for UInt<Ul, B0> where
Ul: Add<Ur>,
[src][+]
Ul: Add<Ur>,
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B1>> for UInt<Ul, B1> where
Ul: Add<Ur>,
Sum<Ul, Ur>: Add<B1>,
[src][+]
Ul: Add<Ur>,
Sum<Ul, Ur>: Add<B1>,
impl<U: Unsigned, B: Bit> Add<UTerm> for UInt<U, B>
[src][+]
impl<Ul: Unsigned, Bl: Bit, Ur: Unsigned> BitAnd<Ur> for UInt<Ul, Bl> where
UInt<Ul, Bl>: PrivateAnd<Ur>,
PrivateAndOut<UInt<Ul, Bl>, Ur>: Trim,
[src][+]
UInt<Ul, Bl>: PrivateAnd<Ur>,
PrivateAndOut<UInt<Ul, Bl>, Ur>: Trim,
type Output = TrimOut<PrivateAndOut<UInt<Ul, Bl>, Ur>>
fn bitand(self, rhs: Ur) -> Self::Output
[src][−]
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B0>> for UInt<Ul, B0> where
Ul: BitOr<Ur>,
[src][+]
Ul: BitOr<Ur>,
type Output = UInt<<Ul as BitOr<Ur>>::Output, B0>
fn bitor(self, rhs: UInt<Ur, B0>) -> Self::Output
[src][−]
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B0>> for UInt<Ul, B1> where
Ul: BitOr<Ur>,
[src][+]
Ul: BitOr<Ur>,
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B1>> for UInt<Ul, B0> where
Ul: BitOr<Ur>,
[src][+]
Ul: BitOr<Ur>,
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B1>> for UInt<Ul, B1> where
Ul: BitOr<Ur>,
[src][+]
Ul: BitOr<Ur>,
impl<B: Bit, U: Unsigned> BitOr<UTerm> for UInt<U, B>
[src][+]
impl<Ul: Unsigned, Bl: Bit, Ur: Unsigned> BitXor<Ur> for UInt<Ul, Bl> where
UInt<Ul, Bl>: PrivateXor<Ur>,
PrivateXorOut<UInt<Ul, Bl>, Ur>: Trim,
[src][+]
UInt<Ul, Bl>: PrivateXor<Ur>,
PrivateXorOut<UInt<Ul, Bl>, Ur>: Trim,
type Output = TrimOut<PrivateXorOut<UInt<Ul, Bl>, Ur>>
fn bitxor(self, rhs: Ur) -> Self::Output
[src][−]
impl<U: Clone, B: Clone> Clone for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Cmp<UInt<U, B>> for UTerm
[src][+]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B0>> for UInt<Ul, B0> where
Ul: PrivateCmp<Ur, Equal>,
[src][+]
Ul: PrivateCmp<Ur, Equal>,
type Output = PrivateCmpOut<Ul, Ur, Equal>
fn compare<IM: InternalMarker>(&self, rhs: &UInt<Ur, B0>) -> Self::Output
[src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B0>> for UInt<Ul, B1> where
Ul: PrivateCmp<Ur, Greater>,
[src][+]
Ul: PrivateCmp<Ur, Greater>,
type Output = PrivateCmpOut<Ul, Ur, Greater>
fn compare<IM: InternalMarker>(&self, rhs: &UInt<Ur, B0>) -> Self::Output
[src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B1>> for UInt<Ul, B1> where
Ul: PrivateCmp<Ur, Equal>,
[src][+]
Ul: PrivateCmp<Ur, Equal>,
type Output = PrivateCmpOut<Ul, Ur, Equal>
fn compare<IM: InternalMarker>(&self, rhs: &UInt<Ur, B1>) -> Self::Output
[src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B1>> for UInt<Ul, B0> where
Ul: PrivateCmp<Ur, Less>,
[src][+]
Ul: PrivateCmp<Ur, Less>,
type Output = PrivateCmpOut<Ul, Ur, Less>
fn compare<IM: InternalMarker>(&self, rhs: &UInt<Ur, B1>) -> Self::Output
[src]
impl<U: Unsigned, B: Bit> Cmp<UTerm> for UInt<U, B>
[src][+]
impl<U: Copy, B: Copy> Copy for UInt<U, B>
[src]
impl<U: Debug, B: Debug> Debug for UInt<U, B>
[src][+]
impl<U: Default, B: Default> Default for UInt<U, B>
[src][+]
impl<Ur: Unsigned, Br: Bit> Div<UInt<Ur, Br>> for UTerm
[src][+]
impl<Ul: Unsigned, Bl: Bit, Ur: Unsigned, Br: Bit> Div<UInt<Ur, Br>> for UInt<Ul, Bl> where
UInt<Ul, Bl>: Len,
Length<UInt<Ul, Bl>>: Sub<B1>,
(): PrivateDiv<UInt<Ul, Bl>, UInt<Ur, Br>, U0, U0, Sub1<Length<UInt<Ul, Bl>>>>,
[src][+]
UInt<Ul, Bl>: Len,
Length<UInt<Ul, Bl>>: Sub<B1>,
(): PrivateDiv<UInt<Ul, Bl>, UInt<Ur, Br>, U0, U0, Sub1<Length<UInt<Ul, Bl>>>>,
impl<U: Eq, B: Eq> Eq for UInt<U, B>
[src]
impl<Xp, Yp> Gcd<UInt<Yp, B0>> for UInt<Xp, B0> where
Xp: Gcd<Yp>,
UInt<Xp, B0>: NonZero,
UInt<Yp, B0>: NonZero,
[src]
Xp: Gcd<Yp>,
UInt<Xp, B0>: NonZero,
UInt<Yp, B0>: NonZero,
gcd(x, y) = 2*gcd(x/2, y/2) if both x and y even
impl<Xp, Yp> Gcd<UInt<Yp, B0>> for UInt<Xp, B1> where
UInt<Xp, B1>: Gcd<Yp>,
UInt<Yp, B0>: NonZero,
[src]
UInt<Xp, B1>: Gcd<Yp>,
UInt<Yp, B0>: NonZero,
gcd(x, y) = gcd(x, y/2) if x odd and y even
impl<Xp, Yp> Gcd<UInt<Yp, B1>> for UInt<Xp, B0> where
Xp: Gcd<UInt<Yp, B1>>,
UInt<Xp, B0>: NonZero,
[src]
Xp: Gcd<UInt<Yp, B1>>,
UInt<Xp, B0>: NonZero,
gcd(x, y) = gcd(x/2, y) if x even and y odd
impl<Xp, Yp> Gcd<UInt<Yp, B1>> for UInt<Xp, B1> where
UInt<Xp, B1>: Max<UInt<Yp, B1>> + Min<UInt<Yp, B1>>,
UInt<Yp, B1>: Max<UInt<Xp, B1>> + Min<UInt<Xp, B1>>,
Maximum<UInt<Xp, B1>, UInt<Yp, B1>>: Sub<Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>,
Diff<Maximum<UInt<Xp, B1>, UInt<Yp, B1>>, Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>: Gcd<Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>,
[src]
UInt<Xp, B1>: Max<UInt<Yp, B1>> + Min<UInt<Yp, B1>>,
UInt<Yp, B1>: Max<UInt<Xp, B1>> + Min<UInt<Xp, B1>>,
Maximum<UInt<Xp, B1>, UInt<Yp, B1>>: Sub<Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>,
Diff<Maximum<UInt<Xp, B1>, UInt<Yp, B1>>, Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>: Gcd<Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>,
gcd(x, y) = gcd([max(x, y) - min(x, y)], min(x, y)) if both x and y odd
This will immediately invoke the case for x even and y odd because the difference of two odd numbers is an even number.
type Output = Gcf<Diff<Maximum<UInt<Xp, B1>, UInt<Yp, B1>>, Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>, Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>
The greatest common divisor.
impl<Un, Bn, Ui, Bi> GetBit<UInt<Ui, Bi>> for UInt<Un, Bn> where
UInt<Ui, Bi>: Copy + Sub<B1>,
Un: GetBit<Sub1<UInt<Ui, Bi>>>,
[src][+]
UInt<Ui, Bi>: Copy + Sub<B1>,
Un: GetBit<Sub1<UInt<Ui, Bi>>>,
impl<Un, Bn> GetBit<UTerm> for UInt<Un, Bn> where
Bn: Copy,
[src][+]
Bn: Copy,
impl<U: Hash, B: Hash> Hash for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Len for UInt<U, B> where
U: Len,
Length<U>: Add<B1>,
Add1<Length<U>>: Unsigned,
[src][+]
U: Len,
Length<U>: Add<B1>,
Add1<Length<U>>: Unsigned,
impl<U, B, Ur> Max<Ur> for UInt<U, B> where
U: Unsigned,
B: Bit,
Ur: Unsigned,
UInt<U, B>: Cmp<Ur> + PrivateMax<Ur, Compare<UInt<U, B>, Ur>>,
[src][+]
U: Unsigned,
B: Bit,
Ur: Unsigned,
UInt<U, B>: Cmp<Ur> + PrivateMax<Ur, Compare<UInt<U, B>, Ur>>,
impl<U, B, Ur> Min<Ur> for UInt<U, B> where
U: Unsigned,
B: Bit,
Ur: Unsigned,
UInt<U, B>: Cmp<Ur> + PrivateMin<Ur, Compare<UInt<U, B>, Ur>>,
[src][+]
U: Unsigned,
B: Bit,
Ur: Unsigned,
UInt<U, B>: Cmp<Ur> + PrivateMin<Ur, Compare<UInt<U, B>, Ur>>,
impl<U: Unsigned, B: Bit> Mul<B0> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Mul<B1> for UInt<U, B>
[src][+]
impl<Ul: Unsigned, B: Bit, Ur: Unsigned> Mul<UInt<Ur, B>> for UInt<Ul, B0> where
Ul: Mul<UInt<Ur, B>>,
[src][+]
Ul: Mul<UInt<Ur, B>>,
impl<Ul: Unsigned, B: Bit, Ur: Unsigned> Mul<UInt<Ur, B>> for UInt<Ul, B1> where
Ul: Mul<UInt<Ur, B>>,
UInt<Prod<Ul, UInt<Ur, B>>, B0>: Add<UInt<Ur, B>>,
[src][+]
Ul: Mul<UInt<Ur, B>>,
UInt<Prod<Ul, UInt<Ur, B>>, B0>: Add<UInt<Ur, B>>,
type Output = Sum<UInt<Prod<Ul, UInt<Ur, B>>, B0>, UInt<Ur, B>>
fn mul(self, rhs: UInt<Ur, B>) -> Self::Output
[src][−]
impl<U: Unsigned, B: Bit> Mul<UTerm> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> NonZero for UInt<U, B>
[src]
impl<U: Ord, B: Ord> Ord for UInt<U, B>
[src][+]
impl<Ur: Unsigned, Br: Bit> PartialDiv<UInt<Ur, Br>> for UTerm
[src][+]
impl<Ul: Unsigned, Bl: Bit, Ur: Unsigned, Br: Bit> PartialDiv<UInt<Ur, Br>> for UInt<Ul, Bl> where
UInt<Ul, Bl>: Div<UInt<Ur, Br>> + Rem<UInt<Ur, Br>, Output = U0>,
[src][+]
UInt<Ul, Bl>: Div<UInt<Ur, Br>> + Rem<UInt<Ur, Br>, Output = U0>,
impl<U: PartialEq, B: PartialEq> PartialEq<UInt<U, B>> for UInt<U, B>
[src][+]
impl<U: PartialOrd, B: PartialOrd> PartialOrd<UInt<U, B>> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for f32
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for f64
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for i64
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for isize
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for u8
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for u16
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for u32
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for u64
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for usize
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for i8
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for i16
[src][+]
impl<U: Unsigned, B: Bit> Pow<UInt<U, B>> for i32
[src][+]
impl PowerOfTwo for UInt<UTerm, B1>
[src]
impl<U: Unsigned + PowerOfTwo> PowerOfTwo for UInt<U, B0>
[src]
impl<Ur: Unsigned, Br: Bit> Rem<UInt<Ur, Br>> for UTerm
[src][+]
impl<Ul: Unsigned, Bl: Bit, Ur: Unsigned, Br: Bit> Rem<UInt<Ur, Br>> for UInt<Ul, Bl> where
UInt<Ul, Bl>: Len,
Length<UInt<Ul, Bl>>: Sub<B1>,
(): PrivateDiv<UInt<Ul, Bl>, UInt<Ur, Br>, U0, U0, Sub1<Length<UInt<Ul, Bl>>>>,
[src][+]
UInt<Ul, Bl>: Len,
Length<UInt<Ul, Bl>>: Sub<B1>,
(): PrivateDiv<UInt<Ul, Bl>, UInt<Ur, Br>, U0, U0, Sub1<Length<UInt<Ul, Bl>>>>,
impl<U: Unsigned, B: Bit> Shl<B0> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Shl<B1> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit, Ur: Unsigned, Br: Bit> Shl<UInt<Ur, Br>> for UInt<U, B> where
UInt<Ur, Br>: Sub<B1>,
UInt<UInt<U, B>, B0>: Shl<Sub1<UInt<Ur, Br>>>,
[src][+]
UInt<Ur, Br>: Sub<B1>,
UInt<UInt<U, B>, B0>: Shl<Sub1<UInt<Ur, Br>>>,
type Output = Shleft<UInt<UInt<U, B>, B0>, Sub1<UInt<Ur, Br>>>
fn shl(self, rhs: UInt<Ur, Br>) -> Self::Output
[src][−]
impl<U: Unsigned, B: Bit> Shl<UTerm> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Shr<B0> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Shr<B1> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit, Ur: Unsigned, Br: Bit> Shr<UInt<Ur, Br>> for UInt<U, B> where
UInt<Ur, Br>: Sub<B1>,
U: Shr<Sub1<UInt<Ur, Br>>>,
[src][+]
UInt<Ur, Br>: Sub<B1>,
U: Shr<Sub1<UInt<Ur, Br>>>,
impl<U: Unsigned, B: Bit> Shr<UTerm> for UInt<U, B>
[src][+]
impl<U, B> StructuralEq for UInt<U, B>
[src]
impl<U, B> StructuralPartialEq for UInt<U, B>
[src]
impl<U: Unsigned, B: Bit> Sub<B0> for UInt<U, B>
[src][+]
impl<U: Unsigned, B: Bit> Sub<B1> for UInt<UInt<U, B>, B1>
[src][+]
impl Sub<B1> for UInt<UTerm, B1>
[src][+]
impl<U: Unsigned> Sub<B1> for UInt<U, B0> where
U: Sub<B1>,
Sub1<U>: Unsigned,
[src][+]
U: Sub<B1>,
Sub1<U>: Unsigned,
impl<Ul: Unsigned, Bl: Bit, Ur: Unsigned> Sub<Ur> for UInt<Ul, Bl> where
UInt<Ul, Bl>: PrivateSub<Ur>,
PrivateSubOut<UInt<Ul, Bl>, Ur>: Trim,
[src][+]
UInt<Ul, Bl>: PrivateSub<Ur>,
PrivateSubOut<UInt<Ul, Bl>, Ur>: Trim,
impl<U, B> ToInt<i16> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<i32> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<i64> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<i8> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<u16> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<u32> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<u64> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<u8> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U, B> ToInt<usize> for UInt<U, B> where
U: Unsigned,
B: Bit,
[src][+]
U: Unsigned,
B: Bit,
impl<U: Unsigned, B: Bit> Unsigned for UInt<U, B>
[src][+]
Auto Trait Implementations
impl<U, B> Send for UInt<U, B> where
B: Send,
U: Send,
B: Send,
U: Send,
impl<U, B> Sync for UInt<U, B> where
B: Sync,
U: Sync,
B: Sync,
U: Sync,
impl<U, B> Unpin for UInt<U, B> where
B: Unpin,
U: Unpin,
B: Unpin,
U: Unpin,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src][+]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> From<T> for T
[src][+]
impl<X> Gcd<UTerm> for X where
X: Unsigned + NonZero,
[src]
X: Unsigned + NonZero,
type Output = X
The greatest common divisor.
impl<T, U> Into<U> for T where
U: From<T>,
[src][+]
U: From<T>,
impl<N> Logarithm2 for N where
N: PrivateLogarithm2,
[src]
N: PrivateLogarithm2,
type Output = <N as PrivateLogarithm2>::Output
The result of the integer binary logarithm.
impl<X, N> Pow<N> for X where
N: Unsigned,
X: Unsigned + PrivatePow<UInt<UTerm, B1>, N>,
[src][+]
N: Unsigned,
X: Unsigned + PrivatePow<UInt<UTerm, B1>, N>,
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<N, I, B> SetBit<I, B> for N where
N: PrivateSetBit<I, B>,
<N as PrivateSetBit<I, B>>::Output: Trim,
[src][+]
N: PrivateSetBit<I, B>,
<N as PrivateSetBit<I, B>>::Output: Trim,
impl<N> SquareRoot for N where
N: PrivateSquareRoot,
[src]
N: PrivateSquareRoot,
type Output = <N as PrivateSquareRoot>::Output
The result of the integer square root.
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src][+]
U: Into<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src][+]
U: TryFrom<T>,