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

bitm

The library for bit and bitmap (bit vector) manipulation

14 releases

0.4.3 Oct 2, 2024
0.4.2 Jun 21, 2024
0.4.1 Feb 25, 2024
0.3.0 Dec 26, 2023
0.1.1 Mar 18, 2022

#238 in Data structures

Download history 8433/week @ 2024-08-23 6070/week @ 2024-08-30 6444/week @ 2024-09-06 5262/week @ 2024-09-13 5076/week @ 2024-09-20 4469/week @ 2024-09-27 4750/week @ 2024-10-04 4641/week @ 2024-10-11 5360/week @ 2024-10-18 4500/week @ 2024-10-25 6082/week @ 2024-11-01 5687/week @ 2024-11-08 5430/week @ 2024-11-15 4060/week @ 2024-11-22 4251/week @ 2024-11-29 3406/week @ 2024-12-06

17,981 downloads per month
Used in 12 crates (8 directly)

MIT/Apache

140KB
2K SLoC

bitm is the Rust library by Piotr Beling for bit and bitmap (bit vector) manipulation.

Example

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

Benchmarks

The performance of some of the structures included in bitm can be tested with the cseq_benchmark crate. Its documentation contains benchmark results.

Dependencies

~125KB