Owl_graphGraph module supports basic operations on DAG.
val id : 'a node -> int``id x`` returns the id of node ``x``.
val name : 'a node -> string``name x`` returns the name string of node ``x``.
val set_name : 'a node -> string -> unit``set_name x s`` sets the name string of node ``x`` to ``s``.
``set_parents x parents`` set ``x`` parents to ``parents``.
``set_children x children`` sets ``x`` children to ``children``.
val indegree : 'a node -> int``indegree x`` returns the in-degree of node ``x``.
val outdegree : 'a node -> int``outdegree x`` returns the out-degree of node ``x``.
val degree : 'a node -> int``degree x`` returns the total number of links of ``x``.
val attr : 'a node -> 'a``attr x`` returns the ``attr`` field of node ``x``.
val set_attr : 'a node -> 'a -> unit``set_attr x`` sets the ``attr`` field of node ``x``.
val num_ancestor : 'a node array -> int``num_ancestor x`` returns the number of ancestors of ``x``.
val num_descendant : 'a node array -> int``num_descendant x`` returns the number of descendants of ``x``.
val length : 'a node array -> int``length x`` returns the total number of ancestors and descendants of ``x``.
``node ~id ~name ~prev ~next attr`` creates a node with given id and name string. The created node is also connected to parents in ``prev`` and children in ``next``. The ``attr`` will be saved in ``attr`` field.
``connect parents children`` connects a set of parents to a set of children. The created links are the Cartesian product of parents and children. In other words, they are bidirectional links between parents and children.
NOTE: this function does not eliminate any duplicates in the array.
``connect_descendants parents children`` connects parents to their children. This function creates unidirectional links from parents to children. In other words, this function save ``children`` to ``parent.next`` field.
``connect_ancestors parents children`` connects children to their parents. This function creates unidirectional links from children to parents. In other words, this function save ``parents`` to ``child.prev`` field.
val remove_node : 'a node -> unit``remove_node x`` removes node ``x`` from the graph by disconnecting itself from all its parent nodes and child nodes.
``remove_edge src dst`` removes a link ``src -> dst`` from the graph. Namely, the correponding entry of ``dst`` in ``src.next`` and ``src`` in ``dst.prev`` will be removed. Note that it does not remove dst -> src if there exists one.
``replace_child x y`` replaces ``x`` with ``y`` in ``x`` parents. Namely, ``x`` parents now make link to ``y`` rather than ``x`` in ``next`` field.
NOTE: The function does NOT make link from ``y`` to ``x`` parents. Namely, the ``prev`` field of ``y`` remains intact.
``replace_parent x y`` replaces ``x`` with ``y`` in ``x`` children. Namely, ``x`` children now make link to ``y`` rather than ``x`` in ``prev`` field.
NOTE: The function does NOT make link from ``y`` to ``x`` children. Namely, the ``next`` field of ``y`` remains intact.
``copy ~dir x`` makes a copy of ``x`` and all its ancestors (if ``dir = Ancestor``) or all its descendants (if ``dir = Descendant``).
Note that this function only makes a copy of the graph structure, ``attr`` fileds of the nodes in the new graph share the same memory with those in the original graph.
val iter_ancestors :
?order:order ->
?traversal:traversal ->
('a node -> unit) ->
'a node array ->
unitIterate the ancestors of a given node.
val iter_descendants :
?order:order ->
?traversal:traversal ->
('a node -> unit) ->
'a node array ->
unitIterate the descendants of a given node.
Filter the ancestors of a given node.
Iterate the descendants of a given node.
Fold the ancestors of a given node.
Fold the descendants of a given node.
Iterate all the in-edges of a given node.
Iterate all the out-edges of a given node.
Fold all the in-edges of a given node.
Fold all the out-edges of a given node.
Topological sort of a given graph using a DFS order. Assumes that the graph is acyclic.
val pp_node : Format.formatter -> 'a node -> unitPretty print a given node.
val to_string : bool -> 'a node array -> stringConvert a given node to its string representaion.