From de448723e5a9443f5df7f367e70990c58a9a04e3 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Sun, 26 Apr 2015 17:49:28 +0600 Subject: Add config tree module. --- src/config_tree.ml | 36 ++++++++++++++++++++++++++++++++++++ src/config_tree.mli | 25 +++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/config_tree.ml create mode 100644 src/config_tree.mli (limited to 'src') diff --git a/src/config_tree.ml b/src/config_tree.ml new file mode 100644 index 0000000..289cf7e --- /dev/null +++ b/src/config_tree.ml @@ -0,0 +1,36 @@ +exception Duplicate_value + +type config_node_data = { + values: string list; + comment: string; + node_type: Vytree.node_type; +} + +type t = config_node_data Vytree.t + +let default_data = { + values = []; + comment = ""; + node_type = Vytree.Other; +} + +let make = Vytree.make default_data + +let set_value node path value = + let data = { default_data with values=[value] } in + Vytree.update node path data + +let add_value node path value = + let node' = Vytree.get node path in + let data = Vytree.data_of_node node' in + let values = data.values in + match (Vylist.find (fun x -> x = value) values) with + | Some _ -> raise Duplicate_value + | None -> + let values = values @ [value] in + Vytree.update node path ({data with values=values}) + +let get_values node path = + let node' = Vytree.get node path in + let data = Vytree.data_of_node node' in + data.values diff --git a/src/config_tree.mli b/src/config_tree.mli new file mode 100644 index 0000000..93a8b76 --- /dev/null +++ b/src/config_tree.mli @@ -0,0 +1,25 @@ +exception Duplicate_value + +type config_node_data = { + values : string list; + comment : string; + node_type : Vytree.node_type; +} + +type t = config_node_data Vytree.t + +val default_data : config_node_data + +val make : string -> config_node_data Vytree.t + +val set_value : + config_node_data Vytree.t -> + string list -> string -> config_node_data Vytree.t + +val add_value : + config_node_data Vytree.t -> + string list -> string -> config_node_data Vytree.t + +val get_values : + config_node_data Vytree.t -> + string list -> string list -- cgit v1.2.3