Skip to content

Releases: Cydhra/vers

Improve Inlining Defaults

06 Nov 14:26

Choose a tag to compare

Bugfixes

  • This patch changes the lookup tables for BP trees from const to static to prevent automatic inlining. This does not change any runtime behavior, but simplifies LTO of downstream crates, shortens compile time of tests, benchmarks, and possibly the crate itself, and potentially improves the binary size.

Fix documentation issues

19 Oct 14:29

Choose a tag to compare

Bugfixes

  • rustdoc removed the doc_auto_cfg feature which broke the rustdoc pipeline
  • Fixed several broken doclinks

SIMD Stabilization

19 Oct 13:25

Choose a tag to compare

The SIMD feature is now stable

Since Rust 1.89.0 stabilized AVX-512, the simd feature no longer requires nightly rust. The feature can now be used on the stable channel for speedups in select, and faster iterators over set bits.
This bumps the MSRV to 1.89.0.

Bugfixes

Due to internal changes to the BitVec and RsVec implementations in version 1.6.3, the Hash implementation no longer fulfilled its invariant with regards to the PartialEq implementation. This is fixed now with a custom implementation of the hashing function.

Quality Of Life

09 Jun 12:52

Choose a tag to compare

Improvements

  • Merged Quality-of-life API improvements. by @arnsholt in #32
    • Conversions between BitVec, RsVec, and various data structures to allow modification of these through back-conversion and regeneration
    • BitVec::split_at to split a bit vector into two
    • BitVec::extend_bitvec and Extend<BitVec> implementation for BitVec to append bit vectors to existing vectors

New Contributors

1.6.3 Minor Space and Runtime Improvements

12 May 18:17

Choose a tag to compare

Improvements

  • removed unnecessary padding at the end of RsVec instances. This padding previously added a constant amount of 0 values to the vector, which were entirely unused and served no purpose. It was a leftover from a previous experimental SIMD implementation.
  • Reduced the code path branching in BitVec::get_bits(i, n) and RsVec::get_bits(i, n) (and the unchecked versions), improving the performance of most operations of BpTree and some of EliasFano by 5-6%

1.6.2 BP serde Support

27 Mar 17:48

Choose a tag to compare

Added support for serde for the BP structures. This has not been done previously to accomodate changes to the search routines BP builds upon under the hood, but I postponed these changes for a future major update.

1.6.1 BitVector padding bug

09 Mar 12:46

Choose a tag to compare

Bugfixes

  • When a BitVec contained non-zero bits in the last limb that were not part of the Vector, either due to using append_bit with extra bits, or by dropping bits from the vector, RsVec::from_bit_vec miscounted the amount of zeros.

Succinct Trees

03 Mar 23:39

Choose a tag to compare

Balanced Parentheses Trees

The crate has a new data structure: Succinct trees using the well-known BP representation.

  • The tree supports tree navigation to parent, children, and siblings, as well as subtree_size and is_ancestor in O(log n)
  • Further, it supports level-tree navigation (i.e. navigation in level-order), also in O(log n)
  • It supports fast depth-first postorder iteration of the entire tree, or individual subtrees.
  • It exposes the usual internal BP helper functions open, close, enclose, and even fwd_search and bwd_search.
  • It is written to support unbalanced parenthesis expressions without panicking on the navigation functions (iterators excluded).

Sparse RsVec

And another new data structure: A sparse bit vector which supports rank1, select1, and rank0 (among the usual convenience features).
It is a thin wrapper around an Elias-Fano vector.

It can be efficiently constructed from a collection of indices of set bits, or from an existing BitVec.

New APIs

Elias Fano

  • Added a rank(i) and select(i) function (the latter being an alias for get(i))
  • Added a delta(i) function, which returns the delta between entries i - 1 and i.
  • Elias Fano construction is a bit over 5% faster

Bit Vectors

  • Added a function append_bits_unchecked which leaves out some housekeeping that append_bit normally does.
  • Added a function unpack_bits(i, n) as a convenient counterpart to the pack_sequence_* constructors. It is an alias for get_bits(i * n, n), and it has an unchecked version too.

Other Fixes

  • small correction in the documentation for rank and select, clarifying the invariant.

1.5.1 - Wavelet Matrix Serde Support

19 Sep 19:57

Choose a tag to compare

What's Changed

  • remove redundant bits_per_element, reducing WaveletMatrix struct size by @somethingelseentirely in #12
  • add serde support to WaveletMatrix

New Contributors

1.5.0

09 Aug 20:05

Choose a tag to compare

New Features

  • Vers now implements a WaveletMatrix to encode arbitrary alphabets. The implementation supports alphabets exceeding 64 bits, but its API works with primitive integers all the same.
  • The Wavelet Matrix supports rank and select queries, predecessor and successor queries, and statistical queries (like range-max, range-min, range-median, range-select-k, ...), and reconstruction of values all in O(k) where k is the alphabet bit size.
  • The Wavelet Matrix supports several iterators over its encoded sequence, including a sorted iterator.