Expand description
Type-level unsigned integers.
Type operators implemented:
From ::core::ops
: BitAnd
, BitOr
, BitXor
, Shl
, Shr
, Add
, Sub
,
Mul
, Div
, and Rem
.
From typenum
: Same
, Cmp
, and Pow
.
Rather than directly using the structs defined in this module, it is recommended that you import and use the relevant aliases from the consts module.
Example
use std::ops::{Add, BitAnd, BitOr, BitXor, Div, Mul, Rem, Shl, Shr, Sub};
use typenum::{Unsigned, U1, U2, U3, U4};
assert_eq!(<U3 as BitAnd<U2>>::Output::to_u32(), 2);
assert_eq!(<U3 as BitOr<U4>>::Output::to_u32(), 7);
assert_eq!(<U3 as BitXor<U2>>::Output::to_u32(), 1);
assert_eq!(<U3 as Shl<U1>>::Output::to_u32(), 6);
assert_eq!(<U3 as Shr<U1>>::Output::to_u32(), 1);
assert_eq!(<U3 as Add<U2>>::Output::to_u32(), 5);
assert_eq!(<U3 as Sub<U2>>::Output::to_u32(), 1);
assert_eq!(<U3 as Mul<U2>>::Output::to_u32(), 6);
assert_eq!(<U3 as Div<U2>>::Output::to_u32(), 1);
assert_eq!(<U3 as Rem<U2>>::Output::to_u32(), 1);
Re-exports
pub use crate::marker_traits::PowerOfTwo;
pub use crate::marker_traits::Unsigned;
Structs
UInt
is defined recursively, whereB
is the least significant bit andU
is the rest of the number. Conceptually,U
should be bound by the traitUnsigned
andB
should be bound by the traitBit
, 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.- The terminating type for
UInt
; it always comes after the most significant bit.UTerm
by itself represents zero, which is aliased toU0
.
Traits
- A type operator that, when implemented for unsigned integer
N
, sets the bit at positionI
toB
.
Type Aliases
- Alias for the result of calling
SetBit
:SetBitOut<N, I, B> = <N as SetBit<I, B>>::Output
.