| /// Helper trait used to add `unsigned()` methods to primitive signed integer |
| /// types. |
| /// |
| /// The purpose of this trait is to signal the intent that the sign bit of a |
| /// signed integer is intended to be discarded and the value is instead |
| /// understood to be a "bag of bits" where the conversion to an unsigned number |
| /// is intended to be lossless. This can be used for example when converting a |
| /// signed integer into a larger width with zero-extension. |
| pub trait Unsigned { |
| /// The unsigned integer for this type which has the same width. |
| type Unsigned; |
| |
| /// View this signed integer as an unsigned integer of the same width. |
| /// |
| /// All bits are preserved. |
| fn unsigned(self) -> Self::Unsigned; |
| } |
| |
| impl Unsigned for i8 { |
| type Unsigned = u8; |
| |
| #[inline] |
| fn unsigned(self) -> u8 { |
| self as u8 |
| } |
| } |
| |
| impl Unsigned for i16 { |
| type Unsigned = u16; |
| |
| #[inline] |
| fn unsigned(self) -> u16 { |
| self as u16 |
| } |
| } |
| |
| impl Unsigned for i32 { |
| type Unsigned = u32; |
| |
| #[inline] |
| fn unsigned(self) -> u32 { |
| self as u32 |
| } |
| } |
| |
| impl Unsigned for i64 { |
| type Unsigned = u64; |
| |
| #[inline] |
| fn unsigned(self) -> u64 { |
| self as u64 |
| } |
| } |
| |
| impl Unsigned for i128 { |
| type Unsigned = u128; |
| |
| #[inline] |
| fn unsigned(self) -> u128 { |
| self as u128 |
| } |
| } |
| |
| impl Unsigned for isize { |
| type Unsigned = usize; |
| |
| #[inline] |
| fn unsigned(self) -> usize { |
| self as usize |
| } |
| } |