#bit-field #deprecated #set-bit #bit-set #iterator #container

废弃 yabf

另一个(已废弃)位字段

6 个版本 (3 个重大更改)

0.3.0 2021 年 10 月 16 日
0.2.0 2021 年 7 月 17 日
0.1.2 2021 年 7 月 12 日
0.1.1 2021 年 4 月 30 日
0.0.3 2021 年 3 月 11 日

#19 in #bit-field

MIT/Apache

34KB
628

crates.io Documentation Workflow Workflow dependency status license

此crate已被废弃

如果您想替换此crate,可以在代码中添加此trait: vob

// u32 is slightly faster for random access w/o any bit operations
pub(crate) type VobU32 = vob::Vob<u32>;

pub(crate) trait GrowingVob {
    /// Will create a new Vob and fill it with `default`
    fn fill(initial_size: usize, default:bool) -> VobU32;
    /// Grow to fit new size, set ´bit´ to ´state´ value
    fn set_grow(&mut self, bit: usize, state: bool) -> bool;
    /// get() with default value `false`
    fn get_f(&self, bit: usize) -> bool;
}

impl GrowingVob for VobU32 {
    #[inline]
    fn fill(initial_size: usize, default:bool) -> Self {
        let mut v = Self::new_with_storage_type(0);
        v.resize(initial_size, default);
        v
    }

    #[inline]
    fn set_grow(&mut self, bit: usize, state: bool) -> bool {
        if bit >= self.len() {
            self.resize(bit + 64, false);
        }
        self.set(bit, state)
    }

    #[inline]
    fn get_f(&self, bit: usize) -> bool {
        self.get(bit).unwrap_or(false)
    }
}

Yabf

世界需要的——另一个位字段结构。

这是一个小巧简单的实现。它只具备位字段的基本功能

  • 设置任意位(如果您设置了第1000万位,列表将至少使用125KB的堆空间)
  • 获取位值
  • 遍历已设置位索引的迭代器。O(容器大小)
  • 容器不会收缩。

yabf::Yabf 是基于 std::vec::Vec 的位字段

let mut a = Yabf::default();
let mut b = Yabf::with_capacity(12345);
// bits are false by default
assert_eq!(a.bit(45), false);
a.set_bit(12345, true);
assert_eq!(a.bit(12345), true);
b.set_bit(345, true);
assert_eq!(b.bit(345), true);

yabf::SmallYabf 是基于 smallvec::SmallVec 的位字段。如果结构中包含的位小于129位,则结构将完全在栈上分配。

let mut a = SmallYabf::default();
let mut b = SmallYabf::with_capacity(12345);
a.set_bit(45, false);
b.set_bit(12345, true);
assert_eq!(a.bit(45), false);
assert_eq!(b.bit(12345), true);
assert_eq!(a.bit(12345), false);

Rust cargo

yabf::SmallYabf 默认启用,如果要禁用,请这样做

yabf = {version="0.3",default-features=false}

yabf::SmallYabf 默认启用

yabf = {version="0.3"}

许可证

在以下许可证中选择一项:

任选。

依赖项

~73KB