is_empty()
worked wrong in non-TRUSTED_HIERARCHY
.
config::Config::max_value()
moved toBitSet::max_capacity()
.config::Config
changed (simplified).
SmallBitset
-BitSet
with minimized memory overhead of hierarchy indirection.internals::PrimitiveArray
.
- Intersection operation
ops::And
does not produceTRUSTED_HIERARCHY
.
NoCache
reduce version was unsound for iterators which had to be dropped.
- On each level, instead of empty block indices Vec, an intrusive single-linked list is now used.
This completely eliminates this kind of memory overhead. Previously, if you would fill
_256bit
bitset, and then clear it - you would end up with additional 132Kb memory overhead from the list of free blocks. Considering that preallocated bitblocks themselves took 2Mb, this saves more than 5% of memory. - Minor
BitSet::remove()
optimization.
BitSetInterface
now have default implementation.BitSet
no longer implementsBitSetInterface
. But&BitSet
still does. This prevents accidental sending container by value.config::with_cache::*
moved toconfig::*
with additional default generic argument.crate::bit_queue
moved tointernals::bit_queue
.crate::Primitive
moved tointernals::Primitive
.Config
bitblocks no longer requireDefault
.
BitBlock::as_array()
.BitBlock::as_array_mut()
.- Some
BitBlock
methods now have default implementations. BitSetOp::HIERARCHY_OPERANDS_CONTAIN_RESULT
marker, for intersection-like optimization in user-defined operations.- Machinery, which allows to implement custom bitsets. Enabled with
impl
flag. internals
module, with implementation details that end user can use for deep customization.
num_traits
dependency removed.
Eq
did not work correctly between !TrustedHierarchy
bitsets.
BitSetInterface
changed (simplified).BitSetOp
renamed toApply
.BinaryOp
renamed toBitSetOp
.binary_op
module renamed toops
.- All former
binary_op
operations renamed.
BitSet
,BitSetOp
,Reduce
now duplicate part ofBitSetInterface
in order to prevent the need ofBitSetInterface
import.CachingIndexIter
now have formerIndexIterator
functionality.CachingBlockIter
now have formerBlockIterator
functionality.BitSetInterface::is_empty()
.BitSetBase::TRUSTED_HIERARCHY
.
IndexIterator
removed.BlockIterator
removed.
IndexIter::move_to
to the empty bitset area fix.
- General minor performance improvement (removed index check in bit-manipulation).
BitSetInterface
'sIntoIterator
now implementIndexIter
.BlockIterCursor
renamed toBlockCursor
.IndexIterCursor
renamed toIndexCursor
.BlockCursor
andIndexCursor
now haveConf
generic parameter.- both cursors now <= 64bit in size.
BlockIter::as_indices
renamed toBlockIter::into_indices
.
BlockCursor
now implementsCopy
.IndexCursor
now implementsCopy
.BlockCursor::start()
.BlockCursor::end()
.BlockCursor::from(usize)
.BlockCursor::from(&DataBlock)
.IndexCursor::start()
.IndexCursor::end()
.IndexCursor::from(usize)
.IndexCursor::from(&DataBlock)
.CachingBlockIter
now implementsClone
.CachingIndexIter
now implementsClone
.CachingBlockIter::traverse
.CachingIndexIter::traverse
.CachingBlockIter
specializedfor_each
implementation.CachingIndexIter
specializedfor_each
implementation.DataBlockIter
now implementsClone
.DataBlockIter::traverse
.DataBlockIter
specializedfor_each
implementation.DataBlock
now implementsEq
.- All
BitSetInterface
s now implementEq
. - All
BitSetInterface
s now implementDebug
. BitSet
(without &) now implementsop
s too.
IndexIterator::as_blocks()
removed as redundant, the same can be achieved with cursor move. And the very need of moving from index iterator to block iterator is questionable.
IConfig
renamed toConfig
.max_range()
moved toConfig
.
BitBlock
trait for implementing customBitSet
bitblock._256bit
Config
added.
Initial version