pub struct Bitfield {
pub parts: Vec<u64>, }
impl Bitfield {
pub fn new(size: usize) -> Self {
let num_parts = (size + 63) / 64; Bitfield {
parts: vec![0; num_parts],
}
}
pub fn set(&mut self, index: usize, value: bool) {
if index >= self.parts.len() * 64 {
panic!("Index out of bounds: {}", index);
}
let part = index / 64;
let bit = index % 64;
if value {
self.parts[part] |= 1 << bit;
} else {
self.parts[part] &= !(1 << bit);
}
}
pub fn get(&self, index: usize) -> bool {
if index >= self.parts.len() * 64 {
panic!("Index out of bounds: {}", index);
}
let part = index / 64;
let bit = index % 64;
(self.parts[part] & (1 << bit)) != 0
}
}