package tezos-context

  1. Overview
  2. Docs

Parameters

module DB : DB

Signature

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

Getters

val mem : DB.tree -> DB.key -> 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.key -> bool Lwt.t

mem_tree t k is like mem but for trees.

val find : DB.tree -> DB.key -> 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.key -> DB.tree option Lwt.t

find_tree t k is like find but for trees.

val list : DB.tree -> ?offset:int -> ?length:int -> DB.key -> (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.

Setters

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.key -> DB.tree -> DB.tree Lwt.t

add_tree is like add but for trees.

val remove : DB.tree -> DB.key -> 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:Tezos_context_sigs.Context.depth -> DB.tree -> DB.key -> order:[ `Sorted | `Undefined ] -> init:'a -> f:(DB.key -> 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 contents of depth exactly d.
  • Lt d folds over nodes and contents of depth strictly less than d.
  • Le d folds over nodes and contents of depth less than or equal to d.
  • Gt d folds over nodes and contents of depth strictly more than d.
  • Ge d folds over nodes and contents 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.

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 Tezos_stdlib.TzString.Map.t
]
val raw_encoding : raw Data_encoding.t
val to_raw : DB.tree -> raw Lwt.t
val of_raw : raw -> DB.tree
type kinded_hash := [
  1. | `Contents of Tezos_crypto.Context_hash.t
  2. | `Node of Tezos_crypto.Context_hash.t
]
type repo = DB.repo
val make_repo : unit -> DB.repo Lwt.t
val shallow : DB.repo -> kinded_hash -> DB.tree
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.

OCaml

Innovation. Community. Security.