trait BitSet {
fn clear(&mut self, index: usize);
fn is_set(&self, index: usize) -> bool;
fn set(&mut self, index: usize);
fn toggle(&mut self, index: usize) {
if self.is_set(index) {
self.clear(index);
} else {
self.set(index);
}
}
}
impl BitSet for u64 {
fn clear(&mut self, index: usize) {
*self &= !(1 << index);
}
fn is_set(&self, index: usize) -> bool {
(*self >> index) & 1 == 1
}
fn set(&mut self, index: usize) {
*self |= 1 << index;
}
fn toggle(&mut self, index: usize) {
*self ^= 1 << index
}
}