]> matita.cs.unibo.it Git - helm.git/commitdiff
Implemented topological sorting according to the dependencies.
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Thu, 28 Sep 2006 11:51:22 +0000 (11:51 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Thu, 28 Sep 2006 11:51:22 +0000 (11:51 +0000)
components/metadata/metadataDeps.ml
components/metadata/metadataDeps.mli

index b393dbb91a8f0f0a3ca74983758e386c02738c3a..f2b1d049644cb72e589e5f86a6a8d4e2c9c74c80 100644 (file)
@@ -91,6 +91,16 @@ let inverse_deps ~dbd uri =
   do_query (MetadataTypes.obj_tbl ())
     @ do_query MetadataTypes.library_obj_tbl
 
+let topological_sort ~dbd uris =
+ let module OrderedUri =
+  struct
+   type t = UriManager.uri
+   let compare = UriManager.compare
+  end in
+ let module Topo = HTopoSort.Make(OrderedUri) in
+  Topo.topological_sort uris
+   (fun uri -> fst (List.split (direct_deps ~dbd uri)))
+
 module DepGraph =
 struct
   module UriTbl = UriManager.UriHashtbl
index ee0954d059e0b61fcc4696f483dad64ad09afed3..f5a6ac22e13171d3d91403ec633419297dfe614d 100644 (file)
@@ -35,6 +35,9 @@ val inverse_deps:
   dbd:HMysql.dbd ->
   UriManager.uri -> (UriManager.uri * MetadataTypes.position) list
 
+val topological_sort:
+  dbd:HMysql.dbd -> UriManager.uri list -> UriManager.uri list
+
   (** Representation of a (lazy) dependency graph.
    * Imperative data structure. *)
 module DepGraph: