bittle 0.2.0

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

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.

use bittle::FixedSet;
use std::mem;

let mut set = FixedSet::<u64>::empty();

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

assert_eq!(mem::size_of_val(&set), mem::size_of::<u64>());

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.

use bittle::{FixedSet, Mask};

let elements = vec![10, 48, 101];
let mut m = FixedSet::<u128>::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);
assert_eq!(it.next(), Some(&48));
assert_eq!(it.next(), None);

Examples

License: MIT/Apache-2.0