NonMax-Unsigned
This crate provides an implementation for non-max integer types with null-pointer-optimization.
This crate is usable in a no-std environment.
Example
use NonMaxU8;
Features
endian-conversion
This feature provides access to little and big endian versions of the non-max integer types as well as conversions between them. The native version for the non-max integers is just a type alias for the correct endianness.
non_max.get() will always return the native endian integer.
use ;
Similar Crates
There are a few similar crates already existing on crates.io:
- nonmax: https://crates.io/crates/nonmax
- nonany: https://crates.io/crates/nonany
- nonn: https://crates.io/crates/nonn
Unlike those crates this implementation does not NonZero.
Those crates store the value as value ^ max which is never 0 as long as value != max.
However this means the binary/hex representation of the stored value is hard to parse.
This implementation instead relies on a large enum NonMaxU8Internal which has 254 variants.
Such an enum also leads to null-pointer-optimization but does not require the xor trick
to prevent 0 values.
Instead it relies on core::mem::transmute_copy.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.