summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@baturin.org>2015-04-26 17:49:28 +0600
committerDaniil Baturin <daniil@baturin.org>2015-04-26 17:49:28 +0600
commitde448723e5a9443f5df7f367e70990c58a9a04e3 (patch)
treeacf564a093b9fce649f6d4d4651364084395a176 /src
parent3891244d49d3c65ef6da6b8644cfb9097b0d51b0 (diff)
downloadvyconf-de448723e5a9443f5df7f367e70990c58a9a04e3.tar.gz
vyconf-de448723e5a9443f5df7f367e70990c58a9a04e3.zip
Add config tree module.
Diffstat (limited to 'src')
-rw-r--r--src/config_tree.ml36
-rw-r--r--src/config_tree.mli25
2 files changed, 61 insertions, 0 deletions
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