summaryrefslogtreecommitdiff
path: root/src/vytree.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/vytree.ml')
-rw-r--r--src/vytree.ml14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/vytree.ml b/src/vytree.ml
index cd44600..3c5e6ab 100644
--- a/src/vytree.ml
+++ b/src/vytree.ml
@@ -13,6 +13,7 @@ exception Duplicate_child
exception Nonexistent_path
exception Insert_error of string
+
let make data name = { name = name; data = data; children = [] }
let make_full data name children = { name = name; data = data; children = children }
@@ -82,12 +83,15 @@ let rec insert ?(position=Default) node path data =
| None ->
raise (Insert_error "Path does not exist")
-let rec insert_multi_level default_data node path data =
- match path with
- | [] | [_] -> insert node path data
+(* When inserting at a path that, entirely or partially,
+ does not exist yet, create missing nodes on the way with default data *)
+let rec insert_multi_level default_data node path_done path_remaining data =
+ match path_remaining with
+ | [] | [_] -> insert node (path_done @ path_remaining) data
| name :: names ->
- let node = insert node [name] default_data in
- insert_multi_level default_data node names data
+ let path_done = path_done @ [name] in
+ let node = insert node path_done default_data in
+ insert_multi_level default_data node path_done names data
let delete node path =
do_with_child delete_immediate node path