Fixes / improvements:
- hash table resize policy: stop pointless and oversized rehashes
- reuse tombstone buckets for new entries
- do not grow the hash table when it is mostly tombstones
- only shrink the hash table when the new capacity is actually smaller
Other changes:
- add a release workflow (sdist build, pypi, provenance attestation, gh release)
- CI: harden the workflows, add dependabot
- update docs
HashTable.items()/HashTableNT.items(): add optionalprefix_bits/prefixarguments to iterate over only the items whose keys start with the given bit prefix. As the keys are random bytes, this partitions the items into2 ** prefix_bitsroughly equally sized, disjoint sets, so a huge hash table can be processed in batches with a small memory footprint, #49.- Require
key_size >= 4to avoid out-of-bounds reads in_get_index, #42. - Add support for Python 3.15, remove 3.10.
- Cythonize with the latest Cython release.
- Cythonize with the latest Cython release.
- Use the SPDX license identifier, require a recent setuptools.
- Add support for Python 3.14, remove 3.9.
- Migrate tox configuration to pyproject.toml.
- Fix typos and grammar.
- HashTableNT: handle
byte_orderseparately. - HashTableNT: provide separate formats in the
value_formatnamedtuple.
- Fixed "KV array is full" crash on 32-bit platforms (and maybe also some other integer-size related issues), #27.
- Added an
.update()method to HashTableNT (likedict.update()), #28.
Initial release.