#arithmetic #overflow #integer

checked

实现了一个原始 Rust 类型包装器,更好地指示算术过程中的溢出

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数据结构

Download history 246/week @ 2024-04-01 148/week @ 2024-04-08 230/week @ 2024-04-15 212/week @ 2024-04-22 196/week @ 2024-04-29 198/week @ 2024-05-06 211/week @ 2024-05-13 228/week @ 2024-05-20 216/week @ 2024-05-27 193/week @ 2024-06-03 194/week @ 2024-06-10 217/week @ 2024-06-17 177/week @ 2024-06-24 107/week @ 2024-07-01 98/week @ 2024-07-08 250/week @ 2024-07-15

649 每月下载量
14 个crate中使用(通过tower-web

MIT 许可证

29KB
588

Checked

实现了对原始 Rust 类型的包装器,在算术过程中更好地指示溢出。

结构体 Checked 解引用为包含数字的选项,或者如果发生溢出则为 None。这意味着可以使用所有 Option 的方法。

注意,Add<T> 为所有原始整数类型 T(例如 u8i16 等)实现了对 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