#packed #compact #unsigned-integer #varint #memory #bitbuffer

unthbuf

无符号N位缓冲区:一个包含固定大小的无符号整数元素的缓冲区结构

3个版本 (1个稳定版)

1.0.0 2023年3月5日
0.2.0 2023年1月6日
0.1.0 2022年10月16日

1914数据结构


用于 packed-uints

MIT/Apache

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 函数来确定丢失了多少空间。

无运行时依赖