close
Skip to content

Releases: codex-semantics-library/patricia-tree

Version 0.15.0 - 2026-08-26

Choose a tag to compare

@dlesbre dlesbre released this 26 Aug 17:40
f69530c

What's Changed

  • fix difference calling its argument on equal values by @dlesbre in #38
  • Add for_all2, fold2, exists2 and iter2 by @dlesbre in #36
  • Fix reflexive_compare not being a true comparison function by @dlesbre in #40

Full Changelog: v0.14.0...v0.15.0

Version 0.14.0 - 2026-06-03

Choose a tag to compare

@dlesbre dlesbre released this 03 Jun 07:47
6a9f917

What's Changed

  • Change type of nonreflexive_subset_domain_for_all2 to allows usage with maps of different type
  • Fix nonidempotent_union typo in documentation table by @sim642 in #31
  • Add JS implem of int_builtins by @dlesbre in #34

New Contributors

Full Changelog: v0.13.0...v0.14.0

v0.13.0

Choose a tag to compare

@dlesbre dlesbre released this 09 Apr 08:06
b3e6f22

Version 0.13.0 - 2026-04-09

  • Add nonidempotent_union (by julow in #26)
  • Add nonidempotent_inter_filter_no_share (by julow in #28)
  • Add reflexive_subset_domain_for_all2, [non]reflexive_any_domain_for_all2, fold_on_union, fold_on_inter (#27)
  • Use a more generic type for fold_on_nonequal_{union,inter}: both maps are no longer required to
    have the same type.
  • Type changes: polyfold2 is renamed to polyfold2_inter; polyfold2_union is renamed to polyfold2
    and gains a new parameter to allow use with maps of different types. This should not break code that
    instantiate these types but will break code that has explicit type annotations.
  • Optimize difference: it can now skip physically equal subtrees.
  • Merge types polyiter and polyfold into a single type with a parameter for return value.
    Same for polyiter2 and polyfold2.

Full Changelog: v0.12.0...v0.13.0

0.12.0

Choose a tag to compare

@dlesbre dlesbre released this 19 Jan 15:31
386d6d5

What's Changed

  • Specify that hash-consed and weak nodes are not thread safe (issue #17)
  • Add MutexProtectNode functors to enable multithreaded use of non-thread safe nodes (#24).
  • Also add Make[Heterogeneous]Hashconsed[Set|Map]WithMutex functors using MutexProtectNode
    for convenience (#24).
  • Fix a bug with nonreflexive_same_domain_forall2 (by julow in #19)

Dev changes

  • Add coverage with bisect_ppx (by julow in #20)
  • Add model based qcheck test (by julow in #21)
  • Add benchmarks (by julow in #22)

New Contributors

  • @Julow made their first contribution in #20

Full Changelog: v0.11.0...v0.12.0

0.11.0

Choose a tag to compare

@dlesbre dlesbre released this 27 Jan 09:19
8c96496

CHANGES:

  • Add some reflexive_equal and reflexive_compare functions
  • Add min_binding_inter for maps, min_elt_inter for sets and their max counterparts
  • Add difference and symmetric_difference function to maps (and add difference to WithForeign)
  • Add diff functions to sets
  • Internal refactor.

0.10.0

Choose a tag to compare

@dlesbre dlesbre released this 01 Jun 10:07
b9b6c64

CHANGES:

Main changes

  • Added hash-consed nodes and functors to build hash-consed maps and sets.
  • Added new functions fold_on_nonequal_inter and fold_on_nonequal_union to maps.
  • Now support using negative keys, removed zarith dependency.
  • Fixed some bugs

Detailed changes

Breaking changes:

  • Renamed MakeCustom to MakeCustomMap, added new functor MakeCustomSet.
    MakeCustomMap changed to take a new argument to specify the 'a value type.
  • Renamed MakeCustomHeterogeneous to MakeCustomHeterogeneousMap, added new functor
    MakeCustomHeterogeneousSet.
  • Renamed NODE_WITH_ID.get_id to NODE_WITH_ID.to_int, this allows using
    instances NODE_WITH_ID directly as a KEY.
  • Renamed VALUE to HETEROGENEOUS_VALUE, added a VALUE module type (previously unnamed).
  • Renamed min_binding, max_binding, pop_minimum, pop_maximum, min_elt
    and max_elt to unsigned_min_binding, unsigned_max_binding,
    pop_unsigned_minimum, pop_unsigned_maximum, unsigned_min_elt
    and unsigned_max_elt respectively, to clarify that these functions consider
    negative numbers as larger than positive ones.

New features:

  • Added new interface MAP_WITH_VALUE which is the same as MAP but with a custom
    type 'a value instead of just 'a.
  • Added HashconsedNode, HashconsedSetNode as well as four functors to create
    hash-consed heterogeneous/homogeneous maps/sets: MakeHashconsedMap, MakeHashconsedSet,
    MakeHashconsedHeterogeneousMap and MakeHashconsedHeterogeneousSet.
  • Now support using negative keys. Trees are built using the bitwise representation
    of integer, meaning they effectively use an unsigned order. Negative keys are
    considered bigger than positive keys, 0 is the minimal number and -1 the maximal one.
  • Added new functions fold_on_nonequal_inter and fold_on_nonequal_union to maps.

Bug fixes:

  • Fixed a bug where NodeWithId wasn't incrementing ids properly
  • zarith is no longer a dependency, used GCC's __builtin_clz as a faster
    method of finding an integer's highest bit.
  • Fixed a bug where pop_minimum and pop_maximum could throw a private exception
    Dissappeared when using WeakNode.
  • Fixed a possible assertion error when using idempotent_subset_domain_forall2
    with WeakNode.
  • Fix compilation warnings when compiling on ocaml 5.2.

0.9.0

Choose a tag to compare

@dlesbre dlesbre released this 18 Apr 14:36
a15fd85

CHANGES:

  • Initial release of Patricia Tree