]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/components/binaries/probe/options.ml
update for the article
[helm.git] / matita / components / binaries / probe / options.ml
index d84d2b3e11c9343dbddb76b0e15af2609bb29f74..ce29c1ef0f7499b6e9e16b8b4275865c3a4f6fd0 100644 (file)
 module A = Array
 module P = Printf
 
-module C = NCic
+module C  = NCic
 module R  = Helm_registry
+module U  = NUri
 module US = NUri.UriSet
 
+module UriPair = struct
+
+  type t = U.uri * U.uri
+
+  let equal (u1l,u1r) (u2l,u2r) =
+     U.eq u1l u2l && U.eq u1r u2r
+
+  let compare (u1l,u1r) (u2l,u2r) =
+    match U.compare u1l u2l with
+    | 0 -> U.compare u1r u2r
+    | c -> c
+
+  let hash (ul,ur) =
+    Hashtbl.hash (U.hash ul, U.hash ur)
+
+end
+
+module UPS = Set.Make(UriPair)
+
 type def_xflavour = [ C.def_flavour
                     | `Inductive
                     ]
@@ -60,27 +80,41 @@ let no_devel = ref default_no_devel
 
 let no_init = ref default_no_init
 
-let index_of_xflavour = function 
-   | `Inductive  -> 0
-   | `Axiom      -> 1 
-   | `Definition -> 2
-   | `Fact       -> 3
-   | `Lemma      -> 4
-   | `Theorem    -> 5
-   | `Corollary  -> 6
-   | `Example    -> 7
+let deps = ref UPS.empty
+
+let index_of_xflavour = function
+  | `Inductive  -> 0
+  | `Axiom      -> 1
+  | `Definition -> 2
+  | `Fact       -> 3
+  | `Lemma      -> 4
+  | `Theorem    -> 5
+  | `Corollary  -> 6
+  | `Example    -> 7
 
 let add_xflavour n xf =
-   let i = index_of_xflavour xf in
-   slot.(i) <- slot.(i) + n
+  let i = index_of_xflavour xf in
+  slot.(i) <- slot.(i) + n
 
 let clear_slot i _ = slot.(i) <- 0
 
 let iter_xflavours map = A.iteri (fun _ -> map) slot
 
+let add_dep c u =
+  deps := UPS.add (c,u) !deps
+
+let out_deps file =
+  let och = open_out file in
+  let map (a,b) =
+    P.fprintf och "\"%s\": \"%s\"\n" (U.string_of_uri a) (U.string_of_uri b)
+  in
+  UPS.iter map !deps;
+  close_out och
+
 let clear () =
-   R.clear (); A.iteri clear_slot slot;
-   objs := default_objs; srcs := default_srcs; remove := default_remove;
-   exclude := default_exclude; net := default_net;
-   chars := default_chars; debug_lexer := default_debug_lexer;
-   no_devel := default_no_devel; no_init := default_no_init
+  R.clear (); A.iteri clear_slot slot;
+  objs := default_objs; srcs := default_srcs; remove := default_remove;
+  exclude := default_exclude; net := default_net;
+  chars := default_chars; debug_lexer := default_debug_lexer;
+  no_devel := default_no_devel; no_init := default_no_init;
+  deps := UPS.empty