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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
use crate::{BitSet, BitSetMut}; impl<T> BitSet for Option<T> where T: BitSet, { const UPPER_BOUND: u32 = T::UPPER_BOUND; fn get(&self, index: u32) -> bool { match self { None => false, Some(bits) => bits.get(index), } } fn find_set(&self, lower_bound: u32) -> Option<u32> { match self { None => None, Some(bits) => bits.find_set(lower_bound), } } } impl<T> BitSetMut for Option<T> where T: BitSetMut + Default, { fn set(&mut self, index: u32, bit: bool) { match (&mut *self, bit) { (None, true) => { let mut bits = T::default(); bits.set(index, true); *self = Some(bits); } (None, false) => {} (Some(bits), false) => { bits.set(index, false); if bits.is_empty() { *self = None; } } (Some(bits), true) => bits.set(index, true), } } }