From 6b7b7ed091900399043d33f5d83ea16b6b4d6a67 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Thu, 14 Feb 2019 22:55:52 +0100 Subject: Add a function for copying nodes. --- lib/bindings.ml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/bindings.ml b/lib/bindings.ml index e8e3df2..49f8ef7 100644 --- a/lib/bindings.ml +++ b/lib/bindings.ml @@ -126,6 +126,16 @@ let return_values c_ptr path = Yojson.Safe.to_string values_json with _ -> Yojson.Safe.to_string `Null +let copy_node c_ptr old_path new_path = + let ct = Root.get c_ptr in + let old_path = Pcre.split ~rex:(Pcre.regexp "\\s+") old_path in + let new_path = Pcre.split ~rex:(Pcre.regexp "\\s+") new_path in + try + let new_ct = Vytree.copy ct old_path new_path in + Root.set c_ptr new_ct; + 0 + with Vytree.Nonexistent_path -> 1 + module Stubs(I : Cstubs_inverted.INTERNAL) = struct @@ -142,11 +152,11 @@ struct let () = I.internal "delete_value" ((ptr void) @-> string @-> string @-> returning int) delete_value let () = I.internal "delete_node" ((ptr void) @-> string @-> returning int) delete_node let () = I.internal "rename_node" ((ptr void) @-> string @-> string @-> returning int) rename_node + let () = I.internal "copy_node" ((ptr void) @-> string @-> string @-> returning int) copy_node let () = I.internal "set_tag" ((ptr void) @-> string @-> returning int) set_tag let () = I.internal "is_tag" ((ptr void) @-> string @-> returning int) is_tag let () = I.internal "exists" ((ptr void) @-> string @-> returning int) exists let () = I.internal "list_nodes" ((ptr void) @-> string @-> returning string) list_nodes let () = I.internal "return_value" ((ptr void) @-> string @-> returning string) return_value let () = I.internal "return_values" ((ptr void) @-> string @-> returning string) return_values - end -- cgit v1.2.3