Skip to content

Latest commit

 

History

History
128 lines (107 loc) · 4.34 KB

CHANGELOG.md

File metadata and controls

128 lines (107 loc) · 4.34 KB

Changelog

0.6.1

Fix

  • is_empty() worked wrong in non-TRUSTED_HIERARCHY.

0.6.0

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.

0.5.1

Fix

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

0.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 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.

0.4.0

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.

0.3.0

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.

0.2.0

Changed

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

Added

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

0.1.0

Initial version