#memory #no-std

无std nonn

已知不等于任何单个N的整型类型

1个不稳定版本

0.1.4 2023年8月29日
0.1.3 2023年8月29日
0.1.2 2023年8月28日
0.1.1 2023年8月27日
0.1.0 2023年8月27日

8#nostd

MIT 许可证

52KB
783

nonn Crates.io

已知不等于任何单个N的整型类型,这可以启用一些内存布局优化。

nonn的大多数代码是从 core::num::nonzero 复制的,并稍作修改。

nonn由 core::num::NonZero* 支持,确保

use std::mem::size_of;

assert_eq!(size_of::<Option<nonn::NonNU8<0>>>(), size_of::<u8>());
assert_eq!(size_of::<Option<nonn::NonNU16<1>>>(), size_of::<u16>());
assert_eq!(size_of::<Option<nonn::NonNU32<2>>>(), size_of::<u32>());
assert_eq!(size_of::<Option<nonn::NonNU64<3>>>(), size_of::<u64>());
assert_eq!(size_of::<Option<nonn::NonNU128<4>>>(), size_of::<u128>());
assert_eq!(size_of::<Option<nonn::NonNUsize<5>>>(), size_of::<usize>());
assert_eq!(size_of::<Option<nonn::NonNI8<6>>>(), size_of::<i8>());
assert_eq!(size_of::<Option<nonn::NonNI16<7>>>(), size_of::<i16>());
assert_eq!(size_of::<Option<nonn::NonNI32<8>>>(), size_of::<i32>());
assert_eq!(size_of::<Option<nonn::NonNI64<9>>>(), size_of::<i64>());
assert_eq!(size_of::<Option<nonn::NonNI128<10>>>(), size_of::<i128>());
assert_eq!(size_of::<Option<nonn::NonNIsize<11>>>(), size_of::<isize>());

nonn在无std环境中工作。

限制

NonN* 类型在大多数方法中不可避免地会引入许多分支。如果您需要更高的性能,建议使用 core::num::nonzerononmax 包。这些替代选项更加专业,因此可以避免nonn使用的许多检查。

nonn目前没有为其类型实现 Neg,因为在理论上,对 NonNU*<N>Neg 应该结果是 NonNI*<-N>。据我所知,即使在nightly版本中,这目前也不可行。

nonn至少需要Rust 1.57.0版本进行编译,但需要1.67.0或更高版本来使用 ilog2ilog10

无运行时依赖