#bitset #bit #flags #bitmask #bitflags #integer

bin+lib rust-dense-bitset

高效的紧凑型 Rust 位集合

2 个版本

0.1.1 2019 年 1 月 16 日
0.1.0 2019 年 1 月 14 日

压缩 中排名 309

Download history 23/week @ 2024-03-11 21/week @ 2024-03-18 31/week @ 2024-03-25 52/week @ 2024-04-01 9/week @ 2024-04-08 24/week @ 2024-04-15 24/week @ 2024-04-22 25/week @ 2024-04-29 23/week @ 2024-05-06 27/week @ 2024-05-13 22/week @ 2024-05-20 25/week @ 2024-05-27 18/week @ 2024-06-03 17/week @ 2024-06-10 15/week @ 2024-06-17 23/week @ 2024-06-24

每月下载量 74
5 个 (3 个直接) 包中使用

MIT 许可证

66KB
1.5K SLoC

rust-dense-bitset

Latest version Documentation Build Status Long time support rustc version License

高效的灵活的自包含 Rust 位集合库。

该库仅适用于安全的 Rust,文档齐全,并在可能的情况下使用最有效的算法。

实现

  • DenseBitSet 是一个紧凑的 64 位位集合,特别支持
  • DenseBitSetExtended 实现了相同的功能,并根据需要扩展位集合以适应所需的位数。内存可以预先分配,并且仅在必要时才执行新的分配。

用法

use rust_dense_bitset::{BitSet, DenseBitSetExtended};

let mut bs = DenseBitSetExtended::from_string(
    String::from("f001eddadf411eddec0de5ca1ab1ec0feefeeb1e01dc0b01"),
    16,
);

let bs2 = DenseBitSetExtended::from_string(
    String::from("0J2aG5BaMRS443FEBRGS5DTMV2A"),
    32
);

bs = bs.rotr(17) | (bs2 << 43);
bs.set_bit(123, true);

println!("{}", bs.subset(3, 64).to_string());

已知限制和注意事项

  • 该数据结构不使用压缩,因此不适合稀疏位集合:在这种情况下,可以考虑使用类似 hibitset 的库。

  • clippy 在位移运算符中错误地报告了有关 "可疑运算符" 的问题。(为了避免错误,我们禁用了 suspicious_op_assign_impl 精简规则)

运行测试

每个单独的函数都会进行测试。使用以下命令运行测试:

cargo test

运行基准测试

使用 Criterion 依赖关系提供精确的基准测试。可以使用以下命令运行基准测试:

cargo bench

文档

使用以下命令生成文档:

cargo doc

许可协议

本项目采用 MIT 许可协议 - 有关详细信息,请参阅 LICENSE.md 文件

无运行时依赖项