3个版本 (1个稳定版)
1.0.0 | 2023年3月5日 |
---|---|
0.2.0 | 2023年1月6日 |
0.1.0 | 2022年10月16日 |
1914 在 数据结构
用于 packed-uints
37KB
625 行
UnthBuf
UnthBuf
是一个数据结构,它包含一个固定大小的无符号整数缓冲区,就像一个 Box<[usize]>
一样... 但是整数的 位大小 可以从 1
调整到 64
位,实际上使其成为一个 Box<[uN]>
!
例如
use unthbuf::{UnthBuf, Bits, aligned::AlignedLayout};
let mut buf = UnthBuf::<AlignedLayout>::new(4096, Bits::new(5).unwrap());
buf.set(21, 5).unwrap();
内部缓冲区是一个 usize
的boxed切片,其中整数 元素 根据选择的 CellLayout
存储在单元格中。
这将产生如下位模式
0101101101101101101101101101101101101101101101101101101101101101
0000000000000000000000000000000000000000000000000000000000000101
integer aligned to word boundary ^^^
或者,如果使用的是 PackedLayout/
PackedUnthBuf
1101101101101101101101101101101101101101101101101101101101101101
^ integer packed across word boundary vv
0000000000000000000000000000000000000000000000000000000000000010
虽然 PackedLayout
确实更紧凑,但它也大约慢20%;当每个比特都很重要时使用它。
您可以使用 UnthBuf::get_padding_bit_count
函数来确定丢失了多少空间。