This is documentation for the development version of Patricia Tree,
the latest released version is
v0.11.0.
Click here
to redirect to the latest version.
Patricia Tree API - NodeWithId
Here, nodes also contain a unique id, e.g. so that they can be used as keys of maps or hash-tables.
Parameters
module Key : sig ... endmodule Value : HETEROGENEOUS_VALUESignature
include NODE
with type 'a key = 'a Key.t
with type ('key, 'map) value = ('key, 'map) Value.t
Types
type 'a key = 'a Key.tThe type of keys.
type ('key, 'map) value = ('key, 'map) Value.tThe type of value, which depends on the type of the key and the type of the map.
Constructors: build values
val empty : 'map tThe empty map
A singleton leaf, similar to BASE_MAP.singleton
A branch node. This shouldn't be called externally unless you know what you're doing! Doing so could easily break the data structure's invariants.
When called, it assumes that:
- Neither
tree0nortree1should be empty. branching_bitshould have a single bit setprefixshould be normalized (bits belowbranching_bitset to zero)- All elements of
tree0should have theirto_intstart byprefixfollowed by 0 at positionbranching_bit). - All elements of
tree1should have theirto_intstart byprefixfollowed by 0 at positionbranching_bit).
Destructors: access the value
type 'map view = private | Empty : 'map view(*Can happen only at the toplevel: there is no empty interior node.
*)| Branch : {} -> 'map view(*Same constraints as
branch:branching_bitcontains only one bit set; the corresponding mask is (branching_bit - 1).prefixis normalized: the bits below thebranching_bitare set to zero (i.e.prefix & (branching_bit - 1) = 0).- All elements of
tree0should have theirto_intstart byprefixfollowed by 0 at positionbranching_bit). - All elements of
tree1should have theirto_intstart byprefixfollowed by 0 at positionbranching_bit).
| Leaf : {} -> 'map view(*A key -> value mapping.
*)
This makes the map nodes accessible to the pattern matching algorithm; this corresponds 1:1 to the SimpleNode implementation. This just needs to be copy-and-pasted for every node type.
val is_empty : 'map t -> boolCheck if the map is empty. Should be constant time.
val to_int : 'a t -> intUnique number for each node.
This is not hash-consing. Equal nodes created separately will have different identifiers. On the flip side, nodes with equal identifiers will always be physically equal.