#bit-vector #bit #bitmap #rank #bitset

bitm

位和位图(位向量)操作的库

13 个不稳定版本 (3 个重大变更)

0.4.2 2024 年 6 月 21 日
0.4.1 2024 年 2 月 25 日
0.3.1 2024 年 1 月 18 日
0.3.0 2023 年 12 月 26 日
0.1.1 2022 年 3 月 18 日

#229数据结构

Download history 4265/week @ 2024-04-28 3723/week @ 2024-05-05 4105/week @ 2024-05-12 3816/week @ 2024-05-19 3459/week @ 2024-05-26 4060/week @ 2024-06-02 4321/week @ 2024-06-09 4477/week @ 2024-06-16 6430/week @ 2024-06-23 4804/week @ 2024-06-30 6594/week @ 2024-07-07 7430/week @ 2024-07-14 6699/week @ 2024-07-21 6637/week @ 2024-07-28 6730/week @ 2024-08-04 6730/week @ 2024-08-11

27,277 每月下载量
13 软件包中使用 (8 个直接使用)

MIT/Apache

135KB
2K SLoC

bitm 是 Piotr Beling 编写的 Rust 库,用于位和位图(位向量)操作。

示例

use bitm::{BitAccess, BitVec, Rank, ArrayWithRank101111};

let mut b = Box::<[u64]>::with_zeroed_bits(2048);    // b can store 2048 bits
assert_eq!(b.get_bit(100), false);  // b is zeroed so bit at index 100 is not set  
b.set_bit(100);                     // set the bit
assert_eq!(b.get_bit(100), true);   // now it is set
assert_eq!(b.get_bits(99, 5), 0b00010); // 5 bits, beginning from index 99, should be 00010

let (r, ones) = ArrayWithRank101111::build(b);
assert_eq!(ones, 1);        // one bit is set in b
assert_eq!(r.rank(100), 0); // no ones in the first 100 bits of b
assert_eq!(r.rank(101), 1); // 1 one in the first 101 bits of b
assert_eq!(r.rank(999), 1); // 1 one in the first 999 bits of b

基准测试

可以使用 cseq_benchmark 软件包测试 bitm 中包含的一些结构的性能。它的文档包含了基准测试结果。

依赖项