blob: 3fec2e773b07e9c59b1b6644c13435e17202bb6a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
(***********************************************************************)
(* *)
(* OCaml *)
(* *)
(* Pierre Chambart, OCamlPro *)
(* *)
(* Copyright 2014 Institut National de Recherche en Informatique et *)
(* en Automatique. All rights reserved. This file is distributed *)
(* under the terms of the Q Public License version 1.0. *)
(* *)
(***********************************************************************)
open Ext_types
module type S = sig
module Id : Identifiable
type directed_graph = Id.Set.t Id.Map.t
(** if (a -> set) belongs to the map, it means that there are edges
from a to every elements of set. It is assumed that no edge
points to a vertex not represented in the map *)
type component =
| Has_loop of Id.t list
| No_loop of Id.t
val connected_components_sorted_from_roots_to_leaf :
directed_graph -> component array
val component_graph :
directed_graph -> (component * int list) array
end
module Make(Id:Identifiable) : S with module Id := Id
|