summaryrefslogtreecommitdiff
path: root/utils/sort_connected_components.mli
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