Revision history for Data-HashMap
0.06 2026-03-23
- Split XS into per-variant xs/*.xsi files
- Pre-reserve in from_hash/merge to avoid repeated resizes
- Fix clone OOM: null shared LRU/TTL pointers before node copy
- Fix from_hash/merge SV* refcount leak on put OOM
- Document freeze/thaw native-endian limitation
- Extended test coverage (1232 tests)
0.05 2026-03-17
- New operations: take, drain, pop, shift, swap, cas, reserve, purge,
clone, from_hash, merge, capacity, persist, freeze/thaw
- Approximate LRU via lru_skip constructor parameter (0-99%)
- Binary serialization (freeze/thaw) for non-SV* variants
- Hardened thaw with per-iteration bounds checks against malformed input
0.04 2026-03-16
- Fix string value NUL-termination for get_direct safety
- Fix lexical sub compatibility for Perl 5.22-5.24
- Widen TTL test timing margins for slow CPAN smokers
- Guard RSS tests against platforms with non-functional /proc
- SV* variant stress and LRU test coverage
0.03 2026-03-13
- Fix UTF-8 key collision: keys with different UTF-8 flags are now distinct
- Fix silent integer truncation: I16/I32 variants croak on out-of-range values
- Fix TTL read-path compaction: get/exists no longer trigger compact(),
preventing each() iterator reset and get_direct pointer invalidation
- Fix each() scalar context: returns key only via method dispatch
- Dedicated memory leak tests (Test::LeakTrace) and RSS reclamation tests
- Updated benchmarks for all 14 variants
0.02 2026-03-12
- Lookup optimizations: cached stash pointer comparison in EXTRACT_MAP
- Switch to bundled xxHash v0.8.3 (XXH3_64bits) for all key hashing
- Add get_direct keyword for zero-copy string-value lookups (IS, SS, I32S, I16S)
- OOM-safe TTL lazy allocation across all put/get_or_set paths
- LRU uint32_t index overflow guard in rehash
- HM_LIKELY/HM_UNLIKELY portability guard for non-GCC/Clang compilers
- Null-value guard in get_or_set for string-value variants
- each() iterator reset documentation covers remove/compaction triggers
- iter_reset keyword for manual each() iterator reset
0.01 2026-03-07
- Initial release
- 14 type-specialized hash map variants: I16, I16A, I16S, I32, I32A, I32S, IA, II, IS, SA, SI16, SI32, SI, SS
- Keyword API via XS::Parse::Keyword (bypasses method dispatch)
- Method dispatch API ($map->put, $map->get, etc.)
- Counter operations (incr, decr, incr_by) for integer-value variants
- LRU eviction (max_size) and TTL expiry (default_ttl)
- Per-key TTL via put_ttl keyword/method
- clear, to_hash, get_or_set operations
- Open addressing with linear probing, xxHash, tombstone compaction