use crate::fixed_bit_string::Iter;
pub trait FixedBitString {
const LEN: usize;
fn inc(&mut self, prefix: usize) -> bool;
fn iter(&self, prefix: usize) -> Iter<Self>
where
Self: Sized + Clone,
{
Iter::new(self.clone(), prefix)
}
fn get(&self, ndx: usize) -> bool;
fn set(&mut self, ndx: usize, bit: bool);
fn flip(&mut self, ndx: usize) {
let old_value = self.get(ndx);
self.set(ndx, !old_value);
}
fn shared_prefix_len(&self, other: &Self) -> usize {
let max_len = Self::LEN;
for i in 0..max_len {
if self.get(i) != other.get(i) {
return i;
}
}
max_len
}
fn set_false_from(&mut self, ndx: usize);
fn is_false_from(&self, ndx: usize) -> bool;
fn set_true_from(&mut self, ndx: usize);
fn is_true_from(&self, ndx: usize) -> bool;
fn new_all_false() -> Self;
fn new_all_true() -> Self;
fn contains(&self, prefix: usize, other: &Self) -> bool;
}