Version 0.21 - 2026-06-27
- Tree now holds strong reference to Node-wrapper objects, so once they are
created (still lazily on demand) they remain until that node is deleted.
This makes it possible to make weak references to Node objects.
Version 0.20 - 2025-12-17
- Fixed bug where 'put' with allow_duplicates did not always replace all other
nodes with identical keys
- Node keys can now be altered, to re-key a node.
- New tree attribute 'recent_limit' auto-prunes oldest nodes when collection
grows past that limit.
- New tree methods insert_as_node and put_as_node return Node objects for the
just-inserted item.
Version 0.19 - 2025-04-11
- New attribute 'keys_in_recent_order' changes behavior of convenience
iteration methods, including for tied hashes.
Version 0.18 - 2025-03-22
- New method 'rekey', for modifying existing keys by an offset
- XS fix for passing hashref to constructor, previously would miss attributes
Version 0.17 - 2024-12-30
- XS fix for crash in Node::STORABLE_thaw when ssize_t is 32 bit and IV is 64 bit.
Version 0.16 - 2024-12-28
- Fix blatant bugs in constructor for handling single-argument compare fn
or hashref, and add tests.
- Fix foldcase on perl 5.14
- Fix compilation errors and warnings on MSVC
- Add alias 'key' for 'get_key'
Version 0.15 - 2024-12-27
- New comparison functions CMP_FOLDCASE, CMP_NUMSPLIT_FOLDCASE,
along with a new internal mechanism for applying a transformation
function to incoming keys before comparing them. Access to this API
can be expanded in future versions.
- Renamed comparison function CMP_UTF8 => CMP_STR, but old name still works
- New methods keys, reverse_keys, values, reverse_values, kv, reverse_kv
Version 0.14 - 2024-08-17
- Fix threaded perl support
Version 0.13 - 2024-08-16
- Support for Storable freeze/thaw on trees and nodes (but not iterators)
- More complete XS constructor is faster and allows more things to be
initialized, including the "recent" list, and "keys" without values.
Warns on unknown attribute names, now.
- Fix null pointer bugs accessing certain attributes of pruned nodes
- example "newest-files"
- Documentation updates
Version 0.12 - 2024-07-09
- Fix fatal bug in prev_inserted_trend optimization
Version 0.11 - 2024-07-09
- New comparison flag GET_OR_ADD, inserts an empty node if one didn't exist
- New get_key function returns nearest key to one requested.
- New get shortcuts get_or_add, get_key_lt, get_key_le, get_key_gt, get_key_ge
- Methods get, lookup, get_or_add, FETCH, and node method 'value' are now
flagged as lvalue subs.
- New exportable function 'cmp_numsplit' can be used independent of tree nodes
Version 0.10 - 2024-07-05
- New method 'exists', takes list of keys and returns node count
- New methods put_multi and insert_multi
- Optimization for insertions of adjacent nodes, can build new tree
in N+1 comparisons
- New configuration attribute 'lookup_updates_recent' finishes the feature
set needed for a typical LRU cache.
- Constructor option 'kv' to initialize the tree
- Fix bug when replacing multiple nodes with a 'put'
Version 0.09 - 2024-07-04
- Fix XS bug in iter->next when iterating 'recent' and count > 1.
- Count greater than INT_MAX passed to iter->next now returns all nodes
instead of zero nodes.
Version 0.08 - 2024-07-02
- New feature of insertion-order tracking:
- Tree attributes: track_recent (and ctor option), newest_node,
oldest_node, recent_count
- Tree methods: iter_newer, iter_older, truncate_recent
- Node attributes: newer, older, recent_tracked
- Node methods: mark_newest, iter_newer, iter_older
- Iterator attribute 'node' (had 'key' and 'value', but not 'node'?)
- Fix bug so iterators can be called as functions, as intended
- Alias iterator methods for clearer singular usage
'next_keys' => 'next_key'
'next_values' => 'next_value'
Version 0.07 - 2022-06-04
- Actual fix for iter->next_kv, only affects debug perls - GitHub #2
- Explicitly require Scalar::Util
Version 0.06 - 2022-05-22
- Possible fix for bug in iter->next_kv
Version 0.05 - 2021-11-20
- Implement hseek
- Fix more bugs in utf8 comparisons (should be really fixed this time)
- Fix compilation on 32-bit platforms
- util/benchmark.pl compares performance with other similar modules
Version 0.03 - 2021-11-18
- New XS iterators, with lots of new methods: clone, key, value, index,
tree, next_kv, next_keys, next_values, step, delete.
- Iterators now automatically move to the next item if the current node
gets removed from the tree.
- Iterators now hold a strong reference to the tree.
- TIEHASH interface, for those who want it.
- More unit tests, more documentation.
- Fixed compilation on 5.12, 5.10, 5.8 at the cost of correct UTF-8 cmp.
Version 0.02 - 2021-11-15
- New CMP_NUMSPLIT comparison function
- New get_node shortcuts: get_node_last, get_node_le, get_node_le_last,
get_node_lt, get_node_ge, get_node_gt.
- Code cleanup
- Minor documentation fixes
Version 0.01 - 2021-11-15
- Finished implementing almost all methods of Tree::RB
- Renamed option 'compat_list_context' to 'compat_list_get'
since it only affected the 'get' method.
- Add tree methods: root, iter, rev_iter
- Add node methods: tree, left_leaf, right_leaf, strip, as_lol
min, max, successor, predecessor
Version 0.00_03 - 2021-11-14
- KEY_TYPE_USTR now uses a correct unicode comparison function.
- Added option 'compat_array_context'
- Comparison functions can now be specified by enum constants
- Added api methods get_all, iter, rev_iter
- Delete now takes a second optional param to delete a range
- Renamed exported constants LU_* to GET_*, and added GET_LE_LAST
and GET_EQ_LAST to handle common cases for duplicate keys.
- More unit tests
- Much more documentation
Version 0.00_02 - 2021-11-13
- Enhanced string-key performance using KEY_TYPE_BSTR and
KEY_TYPE_USTR. KEY_TYPE_STR is removed.
- Various distribution fixes, documentation, etc.
Version 0.00_01 - 2021-11-12
- Initial release, with partial compatibility to Tree::RB