pub struct UInt<U, B> { /* private fields */ }
Expand description
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.
use typenum::{UInt, UTerm, B0, B1};
type U6 = UInt<UInt<UInt<UTerm, B1>, B1>, B0>;
Instantiates a singleton representing this unsigned integer.
The resulting type after applying the +
operator.
UInt<U, B0> + B1 = UInt<U + B1>
The resulting type after applying the +
operator.
UInt<U, B1> + B1 = UInt<U + B1, B0>
The resulting type after applying the +
operator.
UInt<Ul, B0> + UInt<Ur, B0> = UInt<Ul + Ur, B0>
The resulting type after applying the +
operator.
UInt<Ul, B1> + UInt<Ur, B0> = UInt<Ul + Ur, B1>
The resulting type after applying the +
operator.
UInt<Ul, B0> + UInt<Ur, B1> = UInt<Ul + Ur, B1>
The resulting type after applying the +
operator.
UInt<Ul, B1> + UInt<Ur, B1> = UInt<(Ul + Ur) + B1, B0>
The resulting type after applying the +
operator.
UInt<U, B> + UTerm = UInt<U, B>
The resulting type after applying the +
operator.
Anding unsigned integers.
We use our PrivateAnd
operator and then Trim
the output.
The resulting type after applying the &
operator.
UInt<Ul, B0> | UInt<Ur, B0> = UInt<Ul | Ur, B0>
The resulting type after applying the |
operator.
UInt<Ul, B1> | UInt<Ur, B0> = UInt<Ul | Ur, B1>
The resulting type after applying the |
operator.
UInt<Ul, B0> | UInt<Ur, B1> = UInt<Ul | Ur, B1>
The resulting type after applying the |
operator.
UInt<Ul, B1> | UInt<Ur, B1> = UInt<Ul | Ur, B1>
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
Xoring unsigned integers.
We use our PrivateXor
operator and then Trim
the output.
The resulting type after applying the ^
operator.
Performs copy-assignment from source
. Read more
The result of the comparison. It should only ever be one of Greater
, Less
, or Equal
.
UInt<Ul, B0>
cmp with UInt<Ur, B0>
: SoFar
is Equal
The result of the comparison. It should only ever be one of Greater
, Less
, or Equal
.
UInt<Ul, B1>
cmp with UInt<Ur, B0>
: SoFar
is Greater
The result of the comparison. It should only ever be one of Greater
, Less
, or Equal
.
UInt<Ul, B1>
cmp with UInt<Ur, B1>
: SoFar
is Equal
The result of the comparison. It should only ever be one of Greater
, Less
, or Equal
.
UInt<Ul, B0>
cmp with UInt<Ur, B1>
: SoFar
is Less
The result of the comparison. It should only ever be one of Greater
, Less
, or Equal
.
The result of the comparison. It should only ever be one of Greater
, Less
, or Equal
.
Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more
The resulting type after applying the /
operator.
The resulting type after applying the /
operator.
gcd(x, y) = 2*gcd(x/2, y/2) if both x and y even
The greatest common divisor.
gcd(x, y) = gcd(x, y/2) if x odd and y even
The greatest common divisor.
gcd(x, y) = gcd(x/2, y) if x even and y odd
The greatest common divisor.
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.
The greatest common divisor.
The length as a type-level unsigned integer.
This function isn’t used in this crate, but may be useful for others.
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>>,
The type of the maximum of Self
and Rhs
Method returning the maximum
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>>,
The type of the minimum of Self
and Rhs
Method returning the minimum
The resulting type after applying the *
operator.
The resulting type after applying the *
operator.
UInt<Ul, B0> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0>
The resulting type after applying the *
operator.
UInt<Ul, B1> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0> + UInt<Ur, B>
The resulting type after applying the *
operator.
UInt<U, B> * UTerm = UTerm
The resulting type after applying the *
operator.
Compares and returns the maximum of two values. Read more
Compares and returns the minimum of two values. Read more
Restrict a value to a certain interval. Read more
The type of the result of the division
Method for performing the division
The type of the result of the division
Method for performing the division
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
The resulting type after applying the %
operator.
The resulting type after applying the %
operator.
Shifting left any unsigned by a zero bit: U << B0 = U
The resulting type after applying the <<
operator.
Shifting left a UInt
by a one bit: UInt<U, B> << B1 = UInt<UInt<U, B>, B0>
The resulting type after applying the <<
operator.
Shifting left UInt
by UInt
: X << Y
= UInt(X, B0) << (Y - 1)
The resulting type after applying the <<
operator.
Shifting left UInt
by UTerm
: UInt<U, B> << UTerm = UInt<U, B>
The resulting type after applying the <<
operator.
Shifting right any unsigned by a zero bit: U >> B0 = U
The resulting type after applying the >>
operator.
Shifting right a UInt
by a 1 bit: UInt<U, B> >> B1 = U
The resulting type after applying the >>
operator.
Shifting right UInt
by UInt
: UInt(U, B) >> Y
= U >> (Y - 1)
The resulting type after applying the >>
operator.
Shifting right UInt
by UTerm
: UInt<U, B> >> UTerm = UInt<U, B>
The resulting type after applying the >>
operator.
The resulting type after applying the -
operator.
UInt<U, B1> - B1 = UInt<U, B0>
The resulting type after applying the -
operator.
UInt<UTerm, B1> - B1 = UTerm
The resulting type after applying the -
operator.
UInt<U, B0> - B1 = UInt<U - B1, B1>
The resulting type after applying the -
operator.
Subtracting unsigned integers. We just do our PrivateSub
and then Trim
the output.
The resulting type after applying the -
operator.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
Method returning the concrete value for the type.
impl<T> Any for T where
T: 'static + ?Sized,
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
The greatest common divisor.
impl<T, U> Into<U> for T where
U: From<T>,
impl<N> Logarithm2 for N where
N: PrivateLogarithm2,
The result of the integer binary logarithm.
The result of the exponentiation.
This function isn’t used in this crate, but may be useful for others.
It is implemented for primitives. Read more
impl<N, I, B> SetBit<I, B> for N where
N: PrivateSetBit<I, B>,
<N as PrivateSetBit<I, B>>::Output: Trim,
impl<N> SquareRoot for N where
N: PrivateSquareRoot,
The result of the integer square root.
The type returned in the event of a conversion error.
The type returned in the event of a conversion error.