6 个版本 (稳定)
| 3.0.0-rc2 | 2023年1月29日 |
|---|---|
| 3.0.0-rc1 | 2022年11月16日 |
| 2.0.0 | 2021年11月28日 |
| 1.2.0 |
|
| 1.0.0 | 2020年2月24日 |
#212 在 Rust 模式
2,601,280 每月下载量
在 3,609 个crate中使用 (38 直接使用)
81KB
2K SLoC
在 1.0 之前,Rust 有用于数值原始类型的特质,允许代码泛化它接受的具体类型。这从未稳定下来,最终被移除。
该库提供一组特质,这些特质抽象了原始类型的通用 API 表面,因此可以在特质系统中表示诸如数值行为、寄存器宽度或符号等属性。
指针统一
*const T 和 *mut T 在 Pointer<T, Shared | Unique> 类型下统一。 Permission 特质允许代码泛化写权限,并正确地传播、降级和升级权限,而不会违反 Rust 的来源跟踪规则。
特别是, Pointer 使用关联类型系统根据它给定的 Permission 类型参数内部包装 *const T 或 *mut T,因此用户代码永远无法(安全地)不当升级从只读来源历史派生出的指针的写权限。
有关更多信息,请参阅 ptr 模块。
功能特质
所有原始类型(bool、char、{i,u}{8,16,32,64,128,size} 和 f{32,64})实现了 Fundamental 特性。该特性定义了可用于原始类型的基概念:它们是纯旧数据值,并且可以被 as-casted 到彼此。除了提供基本特性和允许转换外,Fundamental 没有其他功能。
数值原始类型(除了 bool 和 char 以外的一切)实现了以下特性层次结构
Numeric导出了在所有数值原始类型上找到的所有特性和方法。Integral导出了在所有整数上找到的特性和方法。Signed统一了所有有符号整数iN。Unsigned统一了所有无符号整数uN。
Floating统一了所有浮点数。
宽度特性
有三个特性家族用于类型宽度。对于 8、16、32、64 和 128 的 Width 值
IsWidth由恰好是这个宽度的数字实现。AtLeastWidth由所有这个宽度或更宽的数字实现。AtMostWidth由所有这个宽度或更窄的数字实现。
使用
类型 use funty::*;,然后声明您需要的特性作为泛型边界。
示例
对某些无符号整数执行位运算
use funty::Unsigned;
fn invert_middle_bits<T: Unsigned>(num: T) -> T {
let mask = (!T::ZERO).wrapping_shl(2).wrapping_shr(4).wrapping_shl(2);
num ^ mask
}
#![no_std] 兼容性
浮点数提供了许多在目标系统的 libm 中实现的功能。这个库仅在 std-targets 中存在。如果您正在编译到 #![no_std] 目标,请使用以下方式依赖此库
[dependencies.funty]
version = "3"
default-features = false