#bits #bitset #bit #run-length

no-std rle-bitset

一个无需std、无需分配的trait,用于查询和操作[usize]中的位,并迭代它们的运行长度

1 个不稳定版本

0.1.0 2020年8月15日

#1875 in 算法

MPL-2.0 许可证

9KB
108

rle-bitset

License Package Documentation

一个无需std、无需分配的trait,用于查询和操作[usize]中的位,并迭代它们的运行长度。

用法

use rle_bitset::*;

#[test]
fn one_two() {
    let mut x: [usize; 4] = [0, 0, 0, 0];
    let over = WORD_WIDTH * 4;
    x.set_bit(WORD_WIDTH, true).unwrap();
    assert_eq!(x.get_bit(WORD_WIDTH).unwrap(), true);
    {
        let mut iter = x.run_lengths(..).unwrap();
        assert_eq!(Some(RL::new(false, 0, WORD_WIDTH)), iter.next());
        assert_eq!(Some(RL::new(true, WORD_WIDTH, WORD_WIDTH + 1)), iter.next());
        assert_eq!(Some(RL::new(false, WORD_WIDTH + 1, over)), iter.next());
        assert_eq!(None, iter.next());
    }
    x.set_bit(WORD_WIDTH - 1, true).unwrap();
    assert_eq!(x.get_bit(WORD_WIDTH - 1).unwrap(), true);
    {
        let mut iter = x.run_lengths(..).unwrap();
        assert_eq!(Some(RL::new(false, 0, WORD_WIDTH - 1)), iter.next());
        assert_eq!(Some(RL::new(true, WORD_WIDTH -1, WORD_WIDTH + 1)), iter.next());
        assert_eq!(Some(RL::new(false, WORD_WIDTH + 1, over)), iter.next());
        assert_eq!(None, iter.next());
    }
}

版权(c)2020 James Laver,rle-bitset 贡献者

本源代码形式受Mozilla公共许可证第2.0版条款的约束。如果未与此文件一起分发MPL副本,您可以在此获得一份:http://mozilla.org/MPL/2.0/

依赖项

~8KB