1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#[derive(Debug)] pub struct BitIteratorLE<E> { t: E, n: usize, sz: usize } impl<E: AsRef<[u64]>> BitIteratorLE<E> { pub fn new(t: E) -> Self { let sz = t.as_ref().len() * 64; BitIteratorLE { t, n:0, sz } } } impl<E: AsRef<[u64]>> Iterator for BitIteratorLE<E> { type Item = bool; fn next(&mut self) -> Option<bool> { if self.n == self.sz { None } else { let part = self.n / 64; let bit = self.n - (64 * part); self.n += 1; Some(self.t.as_ref()[part] & (1 << bit) > 0) } } }