Crates.io | epui |
lib.rs | epui |
version | 0.1.1 |
source | src |
created_at | 2022-01-27 06:09:57.625184 |
updated_at | 2022-01-27 06:12:26.260954 |
description | Equisized (primitive) unsigned ints for primitive ints: u8 for u8, u16 for i16, etc |
homepage | |
repository | https://github.com/JohnScience/epui |
max_upload_size | |
id | 522381 |
size | 8,513 |
According to Rust's reference, primitive numeric integer types in Rust are such:
The unsigned integer types consist of:
Type | Minimum | Maximum |
---|
u8
| 0 | 28-1
u16
| 0 | 216-1
u32
| 0 | 232-1
u64
| 0 | 264-1
u128
| 0 | 2128-1
The signed two's complement integer types consist of:
Type | Minimum | Maximum |
---|
i8
| -(27) | 27-1
i16
| -(215) | 215-1
i32
| -(231) | 231-1
i64
| -(263) | 263-1
i128
| -(2127) | 2127-1
The usize
type is an unsigned integer type with the same number of bits as the
platform's pointer type. It can represent every memory address in the process.
The isize
type is a signed integer type with the same number of bits as the
platform's pointer type. The theoretical upper bound on object and array size
is the maximum isize
value. This ensures that isize
can be used to calculate
differences between pointers into an object or array and can address every byte
within an object along with one byte past the end.
usize
and isize
are at least 16-bits wide.
Note: Many pieces of Rust code may assume that pointers,
usize
, andisize
are either 32-bit or 64-bit. As a consequence, 16-bit pointer support is limited and may require explicit care and acknowledgment from a library to support.
All primitive numeric integer types, including machine-dependent types, come with known size that can be obtained via core::mem::size_of<T>()
and the corresponding signed or unsigned counterpart with the exact size. Such algorithms as C++ 20 standard midpoint relies both on equisized primitive unsigned integers and on equisized primitive signed integers. This crate offers the former.
For equisized primitive signed integers, refer to epsi
crate
Type | Size | Equisized primitive unsigned integer |
---|
i8
| 1 byte | u8
i16
| 2 bytes | u16
i32
| 4 bytes | u32
i64
| 8 bytes | u64
i128
| 16 bytes | u128
isize
| platform-dependent | usize
Type | Size | Equisized primitive unsigned integer |
---|
u8
| 1 byte | u8
u16
| 2 bytes | u16
u32
| 4 bytes | u32
u64
| 8 bytes | u64
u128
| 16 bytes | u128
usize
| platform-dependent | usize
You can notice that EquisizedPrimitiveUnsignedIntExt
is quite long to type. To make it shorter, you are advised to rename the imported trait as EPUI
, the namesake for the crate. Because its uses are meant to be accompanied with fully qualified syntax, such shorthand is indispensible.
use epui::EquisizedPrimitiveUnsignedIntExt as EPUI;
let a = -1i8;
assert_eq!(a as <i8 as EPUI>::EquisizedPrimitiveUnsignedInt, u8::MAX);