package patricia-tree

  1. Overview
  2. Docs
Patricia Tree data structure in OCaml for maps and sets. Supports generic key-value pairs

Install

dune-project
 Dependency

Authors

Maintainers

Sources

patricia-tree-0.13.0.tbz
sha256=9670bac52dcb93ea1bfc1afaf7846bc100bcdc63a7a468d5eb43f2b7660c2da9
sha512=aa182adb046c50f6e4742e59a18efdae2c3dd5d175a231bd8b84391351b0d4bda8dd9b1e3a4c8e71770dfc8fd1ab4f5f3cb32ab3062953f76faa435b441c3894

doc/patricia-tree/PatriciaTree/MutexProtectNode/index.html

Module PatriciaTree.MutexProtectNodeSource

Adds Mutex protection around a NODE by wrapping its contructors in MUTEX.lock / MUTEX.unlock.

  • since v0.12.0

We use a uniform type 'map view to pattern match on maps and sets The actual types 'map t can be a bit different from 'map view to allow for more efficient representations, but view should be a constant time operation for quick conversions.

Parameters

module Node : NODE
module Mutex : MUTEX

Signature

Types

type 'k key = 'k Node.key

The type of keys.

type ('k, 'm) value = ('k, 'm) Node.value

The type of value, which depends on the type of the key and the type of the map.

type 'm t = 'm Node.t

The type of the map, which is parameterized by a type.

Constructors: build values

val empty : 'map t

The empty map

Sourceval leaf : 'key key -> ('key, 'map) value -> 'map t

A singleton leaf, similar to BASE_MAP.singleton

Sourceval branch : prefix:int -> branching_bit:int -> tree0:'map t -> tree1:'map t -> 'map t

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 tree0 nor tree1 should be empty.
  • branching_bit should have a single bit set
  • prefix should be normalized (bits below branching_bit set to zero)
  • All elements of tree0 should have their to_int start by prefix followed by 0 at position branching_bit).
  • All elements of tree1 should have their to_int start by prefix followed by 0 at position branching_bit).

Destructors: access the value

type 'map view = private
  1. | Empty : 'map view
    (*

    Can happen only at the toplevel: there is no empty interior node.

    *)
  2. | Branch : {
    1. prefix : int;
    2. branching_bit : int;
    3. tree0 : 'map t;
    4. tree1 : 'map t;
    } -> 'map view
    (*

    Same constraints as branch:

    • branching_bit contains only one bit set; the corresponding mask is (branching_bit - 1).
    • prefix is normalized: the bits below the branching_bit are set to zero (i.e. prefix & (branching_bit - 1) = 0).
    • All elements of tree0 should have their to_int start by prefix followed by 0 at position branching_bit).
    • All elements of tree1 should have their to_int start by prefix followed by 0 at position branching_bit).
    *)
  3. | Leaf : {
    1. key : 'key key;
    2. value : ('key, 'map) value;
    } -> '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 -> bool

Check if the map is empty. Should be constant time.

val view : 'a t -> 'a view

Convert the map to a view. Should be constant time.