Struct typenum::uint::UInt  [−][src]
pub struct UInt<U, B> { /* fields omitted */ }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]
impl<U: Unsigned, B: Bit> UInt<U, B>[src]Trait Implementations
impl<U: Unsigned> Add<B1> for UInt<U, B1> where
    U: Add<B1>,
    Add1<U>: Unsigned, [src]
impl<U: Unsigned> Add<B1> for UInt<U, B1> where
    U: Add<B1>,
    Add1<U>: Unsigned, [src]UInt<U, B1> + B1 = UInt<U + B1, B0>
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B0>> for UInt<Ul, B0> where
    Ul: Add<Ur>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B0>> for UInt<Ul, B0> where
    Ul: Add<Ur>, [src]UInt<Ul, B0> + UInt<Ur, B0> = UInt<Ul + Ur, B0>
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B0>> for UInt<Ul, B1> where
    Ul: Add<Ur>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B0>> for UInt<Ul, B1> where
    Ul: Add<Ur>, [src]UInt<Ul, B1> + UInt<Ur, B0> = UInt<Ul + Ur, B1>
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B1>> for UInt<Ul, B0> where
    Ul: Add<Ur>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B1>> for UInt<Ul, B0> where
    Ul: Add<Ur>, [src]UInt<Ul, B0> + UInt<Ur, B1> = UInt<Ul + Ur, B1>
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B1>> for UInt<Ul, B1> where
    Ul: Add<Ur>,
    Sum<Ul, Ur>: Add<B1>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Add<UInt<Ur, B1>> for UInt<Ul, B1> where
    Ul: Add<Ur>,
    Sum<Ul, Ur>: Add<B1>, [src]UInt<Ul, B1> + UInt<Ur, B1> = UInt<(Ul + Ur) + B1, B0>
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]
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]Anding unsigned integers.
We use our PrivateAnd operator and then Trim the output.
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B0>> for UInt<Ul, B0> where
    Ul: BitOr<Ur>, [src]
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B0>> for UInt<Ul, B0> where
    Ul: BitOr<Ur>, [src]UInt<Ul, B0> | UInt<Ur, B0> = UInt<Ul | Ur, B0>
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B0>> for UInt<Ul, B1> where
    Ul: BitOr<Ur>, [src]
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B0>> for UInt<Ul, B1> where
    Ul: BitOr<Ur>, [src]UInt<Ul, B1> | UInt<Ur, B0> = UInt<Ul | Ur, B1>
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B1>> for UInt<Ul, B0> where
    Ul: BitOr<Ur>, [src]
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B1>> for UInt<Ul, B0> where
    Ul: BitOr<Ur>, [src]UInt<Ul, B0> | UInt<Ur, B1> = UInt<Ul | Ur, B1>
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B1>> for UInt<Ul, B1> where
    Ul: BitOr<Ur>, [src]
impl<Ul: Unsigned, Ur: Unsigned> BitOr<UInt<Ur, B1>> for UInt<Ul, B1> where
    Ul: BitOr<Ur>, [src]UInt<Ul, B1> | UInt<Ur, B1> = UInt<Ul | Ur, B1>
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]
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]Xoring unsigned integers.
We use our PrivateXor operator and then Trim the output.
impl<U: Clone, B: Clone> Clone for UInt<U, B>[src]
impl<U: Clone, B: Clone> Clone for UInt<U, B>[src]fn clone(&self) -> UInt<U, B>[src]
pub fn clone_from(&mut self, source: &Self)1.0.0[src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B0>> for UInt<Ul, B0> where
    Ul: PrivateCmp<Ur, Equal>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B0>> for UInt<Ul, B0> where
    Ul: PrivateCmp<Ur, Equal>, [src]UInt<Ul, B0> cmp with UInt<Ur, B0>: SoFar is Equal
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B0>> for UInt<Ul, B1> where
    Ul: PrivateCmp<Ur, Greater>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B0>> for UInt<Ul, B1> where
    Ul: PrivateCmp<Ur, Greater>, [src]UInt<Ul, B1> cmp with UInt<Ur, B0>: SoFar is Greater
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B1>> for UInt<Ul, B1> where
    Ul: PrivateCmp<Ur, Equal>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B1>> for UInt<Ul, B1> where
    Ul: PrivateCmp<Ur, Equal>, [src]UInt<Ul, B1> cmp with UInt<Ur, B1>: SoFar is Equal
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B1>> for UInt<Ul, B0> where
    Ul: PrivateCmp<Ur, Less>, [src]
impl<Ul: Unsigned, Ur: Unsigned> Cmp<UInt<Ur, B1>> for UInt<Ul, B0> where
    Ul: PrivateCmp<Ur, Less>, [src]UInt<Ul, B0> cmp with UInt<Ur, B1>: SoFar is Less
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]
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]impl<Xp, Yp> Gcd<UInt<Yp, B0>> for UInt<Xp, B0> where
    Xp: Gcd<Yp>,
    UInt<Xp, B0>: NonZero,
    UInt<Yp, B0>: NonZero, [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]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]
impl<Xp, Yp> Gcd<UInt<Yp, B0>> for UInt<Xp, B1> where
    UInt<Xp, B1>: Gcd<Yp>,
    UInt<Yp, B0>: NonZero, [src]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]
impl<Xp, Yp> Gcd<UInt<Yp, B1>> for UInt<Xp, B0> where
    Xp: Gcd<UInt<Yp, B1>>,
    UInt<Xp, B0>: NonZero, [src]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]
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]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.
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]
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]impl<U: Unsigned, B: Bit> Len for UInt<U, B> where
    U: Len,
    Length<U>: Add<B1>,
    Add1<Length<U>>: Unsigned, [src]
impl<U: Unsigned, B: Bit> Len for UInt<U, B> where
    U: Len,
    Length<U>: Add<B1>,
    Add1<Length<U>>: Unsigned, [src]Length of a bit is 1
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]
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]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]
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]impl<Ul: Unsigned, B: Bit, Ur: Unsigned> Mul<UInt<Ur, B>> for UInt<Ul, B0> where
    Ul: Mul<UInt<Ur, B>>, [src]
impl<Ul: Unsigned, B: Bit, Ur: Unsigned> Mul<UInt<Ur, B>> for UInt<Ul, B0> where
    Ul: Mul<UInt<Ur, B>>, [src]UInt<Ul, B0> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0>
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]
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]UInt<Ul, B1> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0> + UInt<Ur, B>
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]
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]impl<U: PartialOrd, B: PartialOrd> PartialOrd<UInt<U, B>> for UInt<U, B>[src]
impl<U: PartialOrd, B: PartialOrd> PartialOrd<UInt<U, B>> for UInt<U, B>[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]
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]impl<U: Unsigned, B: Bit> Shl<B0> for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> Shl<B0> for UInt<U, B>[src]Shifting left any unsigned by a zero bit: U << B0 = U
impl<U: Unsigned, B: Bit> Shl<B1> for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> Shl<B1> for UInt<U, B>[src]Shifting left a UInt by a one bit: UInt<U, B> << B1 = UInt<UInt<U, B>, B0>
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]
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]Shifting left UInt by UInt: X << Y = UInt(X, B0) << (Y - 1)
impl<U: Unsigned, B: Bit> Shl<UTerm> for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> Shl<UTerm> for UInt<U, B>[src]Shifting left UInt by UTerm: UInt<U, B> << UTerm = UInt<U, B>
impl<U: Unsigned, B: Bit> Shr<B0> for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> Shr<B0> for UInt<U, B>[src]Shifting right any unsigned by a zero bit: U >> B0 = U
impl<U: Unsigned, B: Bit> Shr<B1> for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> Shr<B1> for UInt<U, B>[src]Shifting right a UInt by a 1 bit: UInt<U, B> >> B1 = U
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]
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]Shifting right UInt by UInt: UInt(U, B) >> Y = U >> (Y - 1)
impl<U: Unsigned, B: Bit> Shr<UTerm> for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> Shr<UTerm> for UInt<U, B>[src]Shifting right UInt by UTerm: UInt<U, B> >> UTerm = UInt<U, B>
impl<U: Unsigned> Sub<B1> for UInt<U, B0> where
    U: Sub<B1>,
    Sub1<U>: Unsigned, [src]
impl<U: Unsigned> Sub<B1> for UInt<U, B0> where
    U: Sub<B1>,
    Sub1<U>: Unsigned, [src]UInt<U, B0> - B1 = UInt<U - B1, B1>
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]
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]Subtracting unsigned integers. We just do our PrivateSub and then Trim the output.
impl<U: Unsigned, B: Bit> Unsigned for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> Unsigned for UInt<U, B>[src]const U8: u8[src]
const U16: u16[src]
const U32: u32[src]
const U64: u64[src]
const USIZE: usize[src]
const I8: i8[src]
const I16: i16[src]
const I32: i32[src]
const I64: i64[src]
const ISIZE: isize[src]
fn to_u8() -> u8[src]
fn to_u16() -> u16[src]
fn to_u32() -> u32[src]
fn to_u64() -> u64[src]
fn to_usize() -> usize[src]
fn to_i8() -> i8[src]
fn to_i16() -> i16[src]
fn to_i32() -> i32[src]
fn to_i64() -> i64[src]
fn to_isize() -> isize[src]
impl<U: Copy, B: Copy> Copy for UInt<U, B>[src]
impl<U: Eq, B: Eq> Eq for UInt<U, B>[src]
impl<U: Unsigned, B: Bit> NonZero for UInt<U, B>[src]
impl PowerOfTwo for UInt<UTerm, B1>[src]
impl<U: Unsigned + PowerOfTwo> PowerOfTwo for UInt<U, B0>[src]
impl<U, B> StructuralEq for UInt<U, B>[src]
impl<U, B> StructuralPartialEq 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> BorrowMut<T> for T where
    T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
    T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut T[src]
impl<X> Gcd<UTerm> for X where
    X: Unsigned + NonZero, [src]
impl<X> Gcd<UTerm> for X where
    X: Unsigned + NonZero, [src]type Output = X
The greatest common divisor.
impl<N> Logarithm2 for N where
    N: PrivateLogarithm2, [src]
impl<N> Logarithm2 for N where
    N: PrivateLogarithm2, [src]type Output = <N as PrivateLogarithm2>::Output
The result of the integer binary logarithm.
impl<N, I, B> SetBit<I, B> for N where
    N: PrivateSetBit<I, B>,
    <N as PrivateSetBit<I, B>>::Output: Trim, [src]
impl<N, I, B> SetBit<I, B> for N where
    N: PrivateSetBit<I, B>,
    <N as PrivateSetBit<I, B>>::Output: Trim, [src]impl<N> SquareRoot for N where
    N: PrivateSquareRoot, [src]
impl<N> SquareRoot for N where
    N: PrivateSquareRoot, [src]type Output = <N as PrivateSquareRoot>::Output
The result of the integer square root.