Parametersmodule I : Stdlib .Hashtbl.HashedType
module S : Stdlib .Hashtbl.HashedType
Signaturemodule Fixpoint (X : sig ... end ) : sig ... end
is this an implementation of directed graphs?
Graph constructors and destructorsReturn an empty graph. Optionally, a size can be given, which should be on * the order of the expected number of vertices that will be in the graph (for * hash tables-based implementations). The graph grows as needed, so size
is * just an initial guess.
Remove all vertices and edges from the given graph.
copy g
returns a copy of g
. Vertices and edges (and eventually marks, * see module Mark
) are duplicated.
val add_vertex : t -> vertex -> unit
add_vertex g v
adds the vertex v
in graph g
. Do nothing if v
* is already in g
.
val add_addr : t -> addr -> unit
val remove_vertex : t -> vertex -> unit
remove g v
removes the vertex v
from the graph g
(and all the edges * going from v
in g
). Do nothing if v
is not in g
.
val remove_addr : t -> addr -> unit
val remove_inst : t -> addr -> unit
val remove_symb : t -> addr -> unit
add_edge g v1 v2
adds an edge from the vertex v1
to the vertex v2
in * the graph g
. Add also v1
(resp. v2
) in g
if v1
(resp. v2
) is not * in g
. Do nothing if this edge is already in g
.
val add_edge_e : t -> edge -> unit
add_edge_e g e
adds the edge e
in the graph g
. Add also E.src e
* (resp. E.dst e
) in g
if E.src e
(resp. E.dst e
) is not in g
. Do * nothing if e
is already in g
.
remove_edge g v1 v2
removes the edge going from v1
to v2
from the * graph g
. Do nothing if this edge is not in g
. *
val remove_edge_a : t -> addr -> addr -> unit
val remove_edge_e : t -> edge -> unit
remove_edge_e g e
removes the edge e
from the graph g
. Do nothing if * e
is not in g
. *
Size functionsDegree of a vertex
val out_degree : t -> vertex -> int
out_degree g v
returns the out-degree of v
in g
. *
in_degree g v
returns the in-degree of v
in g
. *
Membership functions Successors and predecessors of a vertexsucc g v
returns the successors of v
in g
. *
pred g v
returns the predecessors of v
in g
. *
Labeled edges going from/to a vertex
succ_e g v
returns the edges going from v
in g
. *
pred_e g v
returns the edges going to v
in g
. *
Graph iteratorsiter/fold on all vertices/edges of a graph
val iter_vertex : (vertex -> unit) -> t -> unit
val fold_vertex : (vertex -> 'a -> 'a ) -> t -> 'a -> 'a
iter/fold on all labeled edges of a graph
val iter_edges_e : (edge -> unit) -> t -> unit
val fold_edges_e : (edge -> 'a -> 'a ) -> t -> 'a -> 'a
Vertex iteratorsEach iterator iterator f v g
iters f
to the successors/predecessors of v
in the graph g
and raises Invalid_argument
if v
is not in g
.
iter/fold on all successors/predecessors of a vertex.
iter/fold on all edges going from/to a vertex.
val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
val fold_succ_e : (edge -> 'a -> 'a ) -> t -> vertex -> 'a -> 'a
val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
val fold_pred_e : (edge -> 'a -> 'a ) -> t -> vertex -> 'a -> 'a