Skip to content

Releases: tower120/hi_sparse_bitset

v0.6.1

24 Jun 17:20
Compare
Choose a tag to compare

Fix

  • is_empty() worked wrong in non-TRUSTED_HIERARCHY.

SmallBitSet (0.6.0)

11 Mar 17:15
Compare
Choose a tag to compare

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 to BitSet::max_capacity().
  • config::Config changed (simplified).

Added

  • SmallBitset - BitSet with minimized memory overhead of hierarchy indirection.
  • internals::PrimitiveArray.

  1. at least in terms of this library

  2. probably not a good name

v0.5.1

25 Feb 13:44
Compare
Choose a tag to compare

Fix

  • Intersection operation ops::And does not produce TRUSTED_HIERARCHY.

v0.5.0

24 Jan 16:01
Compare
Choose a tag to compare

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 implements BitSetInterface.
    But &BitSet still does. This prevents accidental sending container by value.
  • config::with_cache::* moved to config::* with additional default generic argument.
  • crate::bit_queue moved to internals::bit_queue.
  • crate::Primitive moved to internals::Primitive.
  • Config bitblocks no longer require Default.

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

03 Jan 17:00
Compare
Choose a tag to compare

Fix

  • Eq did not work correctly between !TrustedHierarchy bitsets.

Changed

  • BitSetInterface changed (simplified).
  • BitSetOp renamed to Apply.
  • BinaryOp renamed to BitSetOp.
  • binary_op module renamed to ops.
  • All former binary_op operations renamed.

Added

  • BitSet, BitSetOp, Reduce now duplicate part of BitSetInterface in
    order to prevent the need of BitSetInterface import.
  • CachingIndexIter now have former IndexIterator functionality.
  • CachingBlockIter now have former BlockIterator functionality.
  • BitSetInterface::is_empty().
  • BitSetBase::TRUSTED_HIERARCHY.

Removed

  • IndexIterator removed.
  • BlockIterator removed.

v0.3.0

18 Dec 04:24
Compare
Choose a tag to compare

Fix

  • IndexIter::move_to to the empty bitset area fix.

Changed

  • General minor performance improvement (removed index check in bit-manipulation).
  • BitSetInterface's IntoIterator now implement IndexIter.
  • BlockIterCursor renamed to BlockCursor.
  • IndexIterCursor renamed to IndexCursor.
  • BlockCursor and IndexCursor now have Conf generic parameter.
  • both cursors now <= 64bit in size.
  • BlockIter::as_indices renamed to BlockIter::into_indices.

Added

  • BlockCursor now implements Copy.
  • IndexCursor now implements Copy.
  • BlockCursor::start().
  • BlockCursor::end().
  • BlockCursor::from(usize).
  • BlockCursor::from(&DataBlock).
  • IndexCursor::start().
  • IndexCursor::end().
  • IndexCursor::from(usize).
  • IndexCursor::from(&DataBlock).
  • CachingBlockIter now implements Clone.
  • CachingIndexIter now implements Clone.
  • CachingBlockIter::traverse.
  • CachingIndexIter::traverse.
  • CachingBlockIter specialized for_each implementation.
  • CachingIndexIter specialized for_each implementation.
  • DataBlockIter now implements Clone.
  • DataBlockIter::traverse.
  • DataBlockIter specialized for_each implementation.
  • DataBlock now implements Eq.
  • All BitSetInterfaces now implement Eq.
  • All BitSetInterfaces now implement Debug.
  • BitSet (without &) now implements ops 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.

v0.2.0

04 Dec 18:07
Compare
Choose a tag to compare

Changed

  • IConfig renamed to Config.
  • max_range() moved to Config.

Added

  • BitBlock trait for implementing custom BitSet bitblock.
  • _256bit Config added.

v0.1.0

04 Dec 18:06
Compare
Choose a tag to compare

Initial release