pub struct BitSet<Conf: Config> { /* private fields */ }Expand description
Hierarchical sparse bitset.
Tri-level hierarchy. Highest uint it can hold is Level0BitBlock::size() * Level1BitBlock::size() * DataBitBlock::size().
Only the last level contains blocks of actual data. Empty(skipped) data blocks are not allocated.
Structure optimized for intersection speed. (Other inter-bitset operations are in fact fast too - but intersection has the lowest algorithmic complexity.) Insert/remove/contains is fast O(1) too.
Implementations§
Source§impl<Conf: Config> BitSet<Conf>
impl<Conf: Config> BitSet<Conf>
Sourcepub const fn max_capacity() -> usize
pub const fn max_capacity() -> usize
Max usize, BitSet with this Config can hold.
pub fn new() -> Self
Sourcepub fn insert_block(&mut self, block: DataBlock<Conf::DataBitBlock>)
pub fn insert_block(&mut self, block: DataBlock<Conf::DataBitBlock>)
§Panics
Panics, if block is out of index range.
Trait Implementations§
Source§impl<Conf: Config> BitSetBase for BitSet<Conf>
impl<Conf: Config> BitSetBase for BitSet<Conf>
Source§impl<Conf> BitSetInterface for &BitSet<Conf>where
Conf: Config,
impl<Conf> BitSetInterface for &BitSet<Conf>where
Conf: Config,
Source§impl<'de, Conf: Config> Deserialize<'de> for BitSet<Conf>
impl<'de, Conf: Config> Deserialize<'de> for BitSet<Conf>
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl<Conf: Config> Extend<DataBlock<<Conf as Config>::DataBitBlock>> for BitSet<Conf>
impl<Conf: Config> Extend<DataBlock<<Conf as Config>::DataBitBlock>> for BitSet<Conf>
Source§fn extend<T: IntoIterator<Item = DataBlock<Conf::DataBitBlock>>>(
&mut self,
iter: T,
)
fn extend<T: IntoIterator<Item = DataBlock<Conf::DataBitBlock>>>( &mut self, iter: T, )
It is allowed for blocks with the same range to repeat in iterator.
Like ([1,42], [15,27,61]). Their data will be merged.
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<Conf: Config> Extend<usize> for BitSet<Conf>
impl<Conf: Config> Extend<usize> for BitSet<Conf>
Source§fn extend<T: IntoIterator<Item = usize>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = usize>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<Conf, B> From<B> for BitSet<Conf>where
Conf: Config,
B: BitSetInterface<Conf = Conf>,
impl<Conf, B> From<B> for BitSet<Conf>where
Conf: Config,
B: BitSetInterface<Conf = Conf>,
Source§fn from(bitset: B) -> Self
fn from(bitset: B) -> Self
Materialize any BitSetInterface.
Source§impl<Conf: Config> FromIterator<DataBlock<<Conf as Config>::DataBitBlock>> for BitSet<Conf>
impl<Conf: Config> FromIterator<DataBlock<<Conf as Config>::DataBitBlock>> for BitSet<Conf>
Source§fn from_iter<T: IntoIterator<Item = DataBlock<Conf::DataBitBlock>>>(
iter: T,
) -> Self
fn from_iter<T: IntoIterator<Item = DataBlock<Conf::DataBitBlock>>>( iter: T, ) -> Self
It is allowed for blocks with the same range to repeat in iterator.
Like ([1,42], [15,27,61]). Their data will be merged.