]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/registry/helm_registry.ml
- added support for boolean parameters
[helm.git] / helm / ocaml / registry / helm_registry.ml
index 969644b01a2f381c6c28a55439c392cc26c045d8..91fcb67b57225510425da96f47d2f58d10beebaf 100644 (file)
@@ -69,6 +69,11 @@ let dot_rex = Str.regexp "\\."
 let spaces_rex = Str.regexp "[ \t\n\r]+"
 let heading_spaces_rex = Str.regexp "^[ \t\n\r]+"
 
+let split s =
+  (* trailing blanks are removed per default by split *)
+  Str.split spaces_rex (Str.global_replace heading_spaces_rex "" s)
+let merge l = String.concat " " l
+
   (* escapes for xml configuration file *)
 let (escape, unescape) =
   let (in_enc, out_enc) = (`Enc_utf8, `Enc_utf8) in
@@ -93,6 +98,8 @@ let set' registry ~key ~value =
   value_is_valid ~key ~value;
   Hashtbl.replace registry key value
 
+let unset = Hashtbl.remove registry
+
 let env_var_of_key key =
 (*   Pcre.replace ~rex:dot_rex ~templ:"__" (String.uppercase key) *)
   Str.global_replace dot_rex "__" (String.uppercase key)
@@ -135,12 +142,6 @@ let get key =
 
 let set = set' registry
 
-let string_list_of_string s =
-  (* trailing blanks are removed per default by split *)
-(*   Pcre.split ~res:spaces_rex (Pcre.replace ~rex:heading_spaces_rex s) *)
-  Str.split spaces_rex (Str.global_replace heading_spaces_rex "" s)
-let string_of_string_list l = String.concat " " l
-
 let mk_get_set type_name (from_string: string -> 'a) (to_string: 'a -> string) =
   let getter key =
     let value = get key in
@@ -155,8 +156,17 @@ let mk_get_set type_name (from_string: string -> 'a) (to_string: 'a -> string) =
 let (get_string, set_string) = (get, set)
 let (get_int, set_int) = mk_get_set "int" int_of_string string_of_int
 let (get_float, set_float) = mk_get_set "float" float_of_string string_of_float
-let (get_string_list, set_string_list) =
-  mk_get_set "string list" string_list_of_string string_of_string_list
+let (get_bool, set_bool) = mk_get_set "bool" bool_of_string string_of_bool
+let (get_string_list, set_string_list) = mk_get_set "string list" split merge
+
+let get_opt getter key =
+  try
+    Some (getter key)
+  with Key_not_found _ -> None
+let set_opt setter ~key ~value =
+  match value with
+  | None -> unset key
+  | Some value -> setter ~key ~value
 
 (*
 let save_to =