Node.Graphtype 'a t = 'a N.tThe type for store handles.
type metadata = N.Metadata.tThe type for node metadata.
type contents_key = N.Contents.keyThe type of user-defined contents.
val contents_key_t : contents_key Type.ttype node_key = N.keyThe type for node values.
type step = N.Path.stepThe type of steps. A step is used to pass from one node to another.
The type for store values.
val empty : [> Perms.write ] t -> node_key Lwt.tThe empty node.
val v : [> Perms.write ] t -> (step * value) list -> node_key Lwt.tv t n is a new node containing n.
val list : [> Perms.read ] t -> node_key -> (step * value) list Lwt.tlist t n is the contents of the node n.
val find : [> Perms.read ] t -> node_key -> path -> value option Lwt.tfind t n p is the contents of the path p starting form n.
add t n p v is the node x such that find t x p is Some v and it behaves the same n for other operations.
val remove : [> Perms.read_write ] t -> node_key -> path -> node_key Lwt.tremove t n path is the node x such that find t x is None and it behhaves then same as n for other operations.
val closure :
[> Perms.read ] t ->
min:node_key list ->
max:node_key list ->
node_key list Lwt.tclosure t min max is the unordered list of nodes n reachable from a node of max along a path which: (i) either contains no min or (ii) it ends with a min.
Note: Both min and max are subsets of n.
val iter :
[> Perms.read ] t ->
min:node_key list ->
max:node_key list ->
?node:(node_key -> unit Lwt.t) ->
?contents:(contents_key -> unit Lwt.t) ->
?edge:(node_key -> node_key -> unit Lwt.t) ->
?skip_node:(node_key -> bool Lwt.t) ->
?skip_contents:(contents_key -> bool Lwt.t) ->
?rev:bool ->
unit ->
unit Lwt.titer t min max node edge skip rev () iterates in topological order over the closure of t.
It applies the following functions while traversing the graph: node on the nodes; edge n predecessor_of_n on the directed edges; skip_node n to not include a node n, its predecessors and the outgoing edges of n and skip_contents c to not include content c.
If rev is true (the default) then the graph is traversed in the reverse order: node n is applied only after it was applied on all its predecessors; edge n p is applied after node n. Note that edge n p is applied even if p is skipped.