3个不稳定版本
0.2.1 | 2021年5月16日 |
---|---|
0.2.0 | 2021年5月16日 |
0.1.0 | 2021年5月16日 |
#17 in #limited
29KB
468 行
bounded_types
提供了新的类型BoundedI32
、BoundedI64
等,它们的行为与它们的原始对应类型相似,但保证值在您指定的范围内。与其他类似的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-APACHE
和LICENSE-MIT
。
依赖关系
~1–1.6MB
~35K SLoC