1 stable release
new 2.1.1 | Dec 2, 2024 |
---|---|
2.0.0 |
|
1.0.0 |
|
#980 in Rust patterns
413 downloads per month
62KB
1.5K
SLoC
sign-bound
Signed integer types for Rust that are bounded to be either positive or
negative. The API is analogous to the built-in NonZero
types:
PositiveI8
,NegativeI8
PositiveI16
,NegativeI16
PositiveI32
,NegativeI32
PositiveI64
,NegativeI64
PositiveIsize
,NegativeIsize
The types are all memory-layout optimized, so for example Option<PositiveI32>
and Option<NegativeI32>
are both the same size as i32
. Using additional
variants in an enum can also have some space benefits.
enum MyEnum {
A(PositiveI16),
B,
C,
D,
}
assert_eq!(size_of::<MyEnum>(), size_of::<PositiveI16>());
Note that due to the implementation details of this crate, the space optimization for any type will not occur if there are more than 128 additional enum variants.
Option<PositiveIsize>
is particularly useful as a space-efficient optional
Vec
index, since Rust's Vec
structure is
limited to
isize::MAX
entries.