Module Context.Make_tree

Parameters

module DB : DB

Signature

include Mavryk_context_sigs.Context.TREE with type t := DB.t and type key := DB.path and type value := DB.contents and type tree := DB.tree
include Mavryk_context_sigs.Context.VIEW with type t := DB.tree and type tree := DB.tree with type key := DB.path with type value := DB.contents

Getters

val mem : DB.tree -> DB.path -> bool Lwt.t

mem t k is an Lwt promise that resolves to true iff k is bound to a value in t.

val mem_tree : DB.tree -> DB.path -> bool Lwt.t

mem_tree t k is like mem but for trees.

val find : DB.tree -> DB.path -> DB.contents option Lwt.t

find t k is an Lwt promise that resolves to Some v if k is bound to the value v in t and None otherwise.

val find_tree : DB.tree -> DB.path -> DB.tree option Lwt.t

find_tree t k is like find but for trees.

val list : DB.tree -> ?offset:int -> ?length:int -> DB.path -> (string * DB.tree) list Lwt.t

list t key is the list of files and sub-nodes stored under k in t. The result order is not specified but is stable.

offset and length are used for pagination.

val length : DB.tree -> DB.path -> int Lwt.t

length t key is an Lwt promise that resolves to the number of files and sub-nodes stored under k in t.

It is equivalent to let+ l = list t k in List.length l but has a constant-time complexity.

Setters

val add : DB.tree -> DB.path -> DB.contents -> DB.tree Lwt.t

add t k v is an Lwt promise that resolves to c such that:

  • k is bound to v in c;
  • and c is similar to t otherwise.

If k was already bound in t to a value that is physically equal to v, the result of the function is a promise that resolves to t. Otherwise, the previous binding of k in t disappears.

val add_tree : DB.tree -> DB.path -> DB.tree -> DB.tree Lwt.t

add_tree is like add but for trees.

val remove : DB.tree -> DB.path -> DB.tree Lwt.t

remove t k v is an Lwt promise that resolves to c such that:

  • k is unbound in c;
  • and c is similar to t otherwise.

Folding

val fold : ?depth:Mavryk_context_sigs.Context.depth -> DB.tree -> DB.path -> order:[ `Sorted | `Undefined ] -> init:'a -> f:(DB.path -> DB.tree -> 'a -> 'a Lwt.t) -> 'a Lwt.t

fold ?depth t root ~order ~init ~f recursively folds over the trees and values of t. The f callbacks are called with a key relative to root. f is never called with an empty key for values; i.e., folding over a value is a no-op.

The depth is 0-indexed. If depth is set (by default it is not), then f is only called when the conditions described by the parameter is true:

  • Eq d folds over nodes and values of depth exactly d.
  • Lt d folds over nodes and values of depth strictly less than d.
  • Le d folds over nodes and values of depth less than or equal to d.
  • Gt d folds over nodes and values of depth strictly more than d.
  • Ge d folds over nodes and values of depth more than or equal to d.

If order is `Sorted (the default), the elements are traversed in lexicographic order of their keys. For large nodes, it is memory-consuming, use `Undefined for a more memory efficient fold.

Configuration

config t is t's hash configuration.

val is_empty : DB.tree -> bool

is_empty t is true iff t is empty _.

kind t is t's kind. It's either a tree node or a leaf value.

val to_value : DB.tree -> DB.contents option Lwt.t

to_value t is an Lwt promise that resolves to Some v if t is a leaf tree and None otherwise. It is equivalent to find t [].

hash t is t's Merkle hash.

val equal : DB.tree -> DB.tree -> bool

equal x y is true iff x and y have the same Merkle hash.

Caches

val clear : ?depth:int -> DB.tree -> unit

clear ?depth t clears all caches in the tree t for subtrees with a depth higher than depth. If depth is not set, all of the subtrees are cleared.

val pp : Stdlib.Format.formatter -> DB.tree -> unit
val empty : _ -> DB.tree
val of_value : _ -> DB.contents -> DB.tree Lwt.t
type raw = [
  1. | `Value of DB.contents
  2. | `Tree of raw Mavryk_base.TzPervasives.String.Map.t
]
val raw_encoding : raw Mavryk_base.TzPervasives.Data_encoding.t
val to_raw : DB.tree -> raw Lwt.t
val of_raw : raw -> DB.tree
val unshallow : DB.tree -> DB.tree Lwt.t
type kinded_key := [
  1. | `Value of DB.contents_key
  2. | `Node of DB.node_key
]
type repo = DB.repo
val make_repo : unit -> DB.repo Lwt.t
val kinded_key : DB.tree -> kinded_key option
val is_shallow : DB.tree -> bool
exception Context_dangling_hash of string

Exception raised by find_tree and add_tree when applied to shallow trees. It is exposed for so that the memory context can in turn raise it.