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