11 个不稳定版本 (3 个重大变更)
0.4.1 | 2024年5月11日 |
---|---|
0.4.0 | 2024年5月11日 |
0.3.0 | 2024年4月21日 |
0.2.1 | 2024年2月4日 |
0.1.4 | 2023年12月28日 |
#733 in 编码
在 quadboard 中使用
22KB
431 行
Halfling
一组用于处理 半字节 的基本实用程序。
用法
halfling
的核心类型是 Nibble
,它实际上是一个围绕 u8
的包装器,保证它始终小于16。
// nibbles can be constructed safely with Nibble::new
let valid_nibble = Nibble::new(10); // returns Some(10)
let invalid_nibble = Nibble::new(16); // returns None
// if you already know a value to be less than 16, you can use Nibble::new_unchecked
let quick_nibble = unsafe { Nibble::new_unchecked(6) };
// using Nibble::new_unchecked with a value greater than 16 is undefined behaviour
由于 Rust 中内存的最小单位是字节,因此无法使用多余的位来构造 Nibble
。但是,可以通过一些枚举技巧告诉编译器哪些 u8
值是有效的 Nibble
值,因此其他240个值可以作为空位使用。
// a Nibble is a byte-width struct
assert_eq!(std::mem::size_of<Nibble>(), 1);
// because Nibble has well-defined niches, Option<Nibble> is also byte-width
assert_eq!(std::mem::size_of<Nibble>(), std::mem::size_of<Option<Nibble>>());
// currently, it seems like rustc can't apply the same optimisation to non-unit enum variants
assert_eq!(std::mem::size_of<Result<Nibble, Nibble>>(), 2)
依赖项
~280–740KB
~17K SLoC