#bounded #integer #int #limited #numbers #const-generics

bounded_types

提供了一种表示有界整数的类型,使用const泛型实现

3个不稳定版本

0.2.1 2021年5月16日
0.2.0 2021年5月16日
0.1.0 2021年5月16日

#17 in #limited

MIT/Apache

29KB
468

bounded_types

提供了新的类型BoundedI32BoundedI64等,它们的行为与它们的原始对应类型相似,但保证值在您指定的范围内。与其他类似的crate不同,这些类型是使用新稳定化的const泛型特性实现的,这简化了使用此类型的方式,使其更加直观和符合惯用法。

它们是围绕一个Result的包装器,但实现了诸如PartialEq<{Integer}>和甚至是Ord<{Integer}>的特性,使它们在很多方面表现得像整数。一些特性(例如Add)故意没有实现,因为这些特性对于超出范围的值是不合法的。

示例

use bounded_types::BoundedI64;

// If an in-bounds value is stored, comparisons behave like you would expect.
let bounded_ok: BoundedI64<2, 10> = 5.into();

assert!(bounded_ok == 5);
assert!(bounded_ok >= 5);
assert!(bounded_ok >= 4);
// you can compare with any integer
assert!(bounded_ok < 100);
assert!(bounded_ok > -100);

// If an out-of-bounds value is stored, comparisons always return `false`
let bounded_err: BoundedI64<2, 10> = 11.into();

assert_eq!(bounded_err == 11, false);
assert_eq!(bounded_err > 5, false);

内存使用

use bounded_types::*;
use std::mem::size_of;
assert!(size_of::<Option<i8>>() == size_of::<BoundedI8<0, 10>>());
assert!(size_of::<Option<i16>>() == size_of::<BoundedI16<0, 10>>());
assert!(size_of::<Option<i32>>() == size_of::<BoundedI32<0, 10>>());
assert!(size_of::<Option<i64>>() == size_of::<BoundedI64<0, 10>>());
assert!(size_of::<Option<i128>>() == size_of::<BoundedI128<0, 10>>());
// etc. you get the idea

许可协议

bounded_types主要在MIT许可协议和Apache许可协议(版本2.0)的条款下分发。

有关详细信息,请参阅LICENSE-APACHELICENSE-MIT

依赖关系

~1–1.6MB
~35K SLoC