From a464bec4d558533776329634504ab0c1bee84bba Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Fri, 5 Jun 2026 15:03:44 +0200 Subject: some bytecode implementation, does not work yet --- src/bitset.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/bitset.rs (limited to 'src/bitset.rs') diff --git a/src/bitset.rs b/src/bitset.rs new file mode 100644 index 0000000..eae2596 --- /dev/null +++ b/src/bitset.rs @@ -0,0 +1,43 @@ +#[derive(Clone, PartialEq, Eq)] +pub struct BitSet { + data: Vec, + size: usize, +} + +const BITS: usize = 32; + +impl BitSet { + pub fn new(size: usize) -> Self { + Self { + size, + data: vec![0; size.div_ceil(32)], + } + } + + pub fn set(&mut self, bit: usize, val: bool) { + assert!(bit < self.size); + let idx = bit / BITS; + let bit = bit % BITS; + + if val { + self.data[idx] |= 1 << bit; + } else { + self.data[idx] &= !(1 << bit); + } + } + + pub fn get(&self, bit: usize) -> bool { + assert!(bit < self.size); + let idx = bit / BITS; + let bit = bit % BITS; + + (self.data[idx] & (1 << bit)) != 0 + } + + pub fn set_all(&mut self, val: bool) { + let val = if val { !0 } else { 0 }; + for d in self.data.iter_mut() { + *d = val; + } + } +} -- cgit v1.2.3