bittle

Documentation Crates Actions Status

A library for working with small and cheap bit sets and masks.

The name bittle comes from bit and little.

The bit sets are entirely defined using [Copy] types in Rust such as u64 or [u128; 4] who's number of bits define the capacity of the set.

```rust use bittle::FixedSet; use std::mem;

let mut set = FixedSet::::empty();

assert!(!set.test(31)); set.set(31); assert!(set.test(31)); set.unset(31); assert!(!set.test(31));

asserteq!(mem::sizeofval(&set), mem::sizeof::()); ```

The [Mask] trait can be used to abstract over the read-only side of a bit set. It has useful utilities such as iterating over masked elements through [Mask::join].

```rust use bittle::{FixedSet, Mask};

let elements = vec![10, 48, 101]; let mut m = FixedSet::::empty();

// Since set is empty, no elements are iterated over. let mut it = m.join(&elements); assert_eq!(it.next(), None);

m.set(1);

let mut it = m.join(&elements); asserteq!(it.next(), Some(&48)); asserteq!(it.next(), None); ```

Examples

License: MIT/Apache-2.0