Releases: tower120/hi_sparse_bitset
Releases · tower120/hi_sparse_bitset
v0.6.1
SmallBitSet (0.6.0)
This release introduces a little breakthrough in hierarchical bitsets 1 with SmallBitset.
SmallBitset uses technique we've called "SparseBitMap"2, which virtually eliminates the memory overhead of hierarchy indirection! This renders the container comparable to HashSet<usize>
in terms of memory usage for sparse sets (and obviously surpass it for dense ones).
Changed
config::Config::max_value()
moved toBitSet::max_capacity()
.config::Config
changed (simplified).
Added
SmallBitset
-BitSet
with minimized memory overhead of hierarchy indirection.internals::PrimitiveArray
.
v0.5.1
v0.5.0
Fix
NoCache
reduce version was unsound for iterators which had to be dropped.
Optimization
- 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.
Changed
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
.
Added
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.
Removed
num_traits
dependency removed.
Trusted Hierarchy
Fix
Eq
did not work correctly between !TrustedHierarchy
bitsets.
Changed
BitSetInterface
changed (simplified).BitSetOp
renamed toApply
.BinaryOp
renamed toBitSetOp
.binary_op
module renamed toops
.- All former
binary_op
operations renamed.
Added
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
.
Removed
IndexIterator
removed.BlockIterator
removed.
v0.3.0
Fix
IndexIter::move_to
to the empty bitset area fix.
Changed
- 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
.
Added
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.
Removed
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.