use std::cmp::min;
use fixed_bit_string::Iter;
pub trait FixedBitString {
fn inc(&mut self, prefix: usize) -> bool;
fn iter(&self, prefix: usize) -> Iter<Self>
where
Self: Sized + Clone,
{
Iter::new(self.clone(), prefix)
}
fn len() -> usize;
fn get(&self, ndx: usize) -> bool;
fn set(&mut self, ndx: usize, bit: bool);
fn on(&mut self, ndx: usize) {
self.set(ndx, true);
}
fn off(&mut self, ndx: usize) {
self.set(ndx, false);
}
fn flip(&mut self, ndx: usize) {
let old_value = self.get(ndx);
self.set(ndx, !old_value);
}
fn shared_prefix_len(&self, other: &Self, max_len: usize) -> usize {
let max_len = min(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;
}