7 个版本 (4 个破坏性更改)
使用旧的 Rust 2015
0.5.0 | 2018年2月17日 |
---|---|
0.4.0 | 2017年8月12日 |
0.3.1 | 2017年8月5日 |
0.2.0 | 2017年8月5日 |
0.1.1 | 2017年8月5日 |
#1859 在 数据结构
649 每月下载量
在 14 个crate中使用(通过tower-web)
29KB
588 行
Checked
实现了对原始 Rust 类型的包装器,在算术过程中更好地指示溢出。
结构体 Checked
解引用为包含数字的选项,或者如果发生溢出则为 None
。这意味着可以使用所有 Option
的方法。
注意,Add<T>
为所有原始整数类型 T
(例如 u8
、i16
等)实现了对 Checked<T>
的支持,因此实际上只需要左边的整数是一个 Checked
对象。一旦算术运算遇到右边的 OR 左边的 Checked<T>
,所有剩余的结果也都是 Checked
。只需确保在第一个潜在溢出之前有一个 Checked
即可。
此结构基于 std::num::Wrapping
实现,但使用检查算术而不是包装算术。有一个 RFC 提到了这种方法,但据我所知,它从未在任何地方实现过。
示例
extern crate checked
use checked::Checked;
fn main() {
let x = Checked::from(1_000_000_000_u32) * 3 + 2_000_000_000;
match *x {
Some(y) => println!("Didn't overflow: x is {}.", y),
None => println!("The arithmetic overflowed."),
}
}
文档
文档可在此处找到。
贡献
我可能随着时间的推移尝试添加更多功能:创建一个问题或拉取请求以开始。
依赖关系
~155KB