From c59462de5168b4050ff8517e8215a7692949e85b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 15 Oct 2019 08:22:31 -0700 Subject: tree: api: harmonize deletion with insertion. * tree.c (tree_delete): Renamed to tree_delete_node. (tree_delete): New function which returns element rather than node. (tree_root): Registered tree-delete-node intrinsic. * txr.1: Documented. --- tree.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'tree.c') diff --git a/tree.c b/tree.c index 544c991d..22cac379 100644 --- a/tree.c +++ b/tree.c @@ -423,13 +423,19 @@ static val tree_lookup(val tree, val key) return if2(node, node->tn.key); } -static val tree_delete(val tree, val key) +static val tree_delete_node(val tree, val key) { - val self = lit("tree-delete"); + val self = lit("tree-delete-node"); struct tree *tr = coerce(struct tree *, cobj_handle(self, tree, tree_s)); return tr_delete(tr, key); } +static val tree_delete(val tree, val key) +{ + val node = tree_delete_node(tree, key); + return if2(node, node->tn.key); +} + static val tree_root(val tree) { val self = lit("tree-root"); @@ -678,6 +684,7 @@ void tree_init(void) reg_fun(intern(lit("tree-insert"), user_package), func_n2(tree_insert)); reg_fun(intern(lit("tree-lookup-node"), user_package), func_n2(tree_lookup_node)); reg_fun(intern(lit("tree-lookup"), user_package), func_n2(tree_lookup)); + reg_fun(intern(lit("tree-delete-node"), user_package), func_n2(tree_delete_node)); reg_fun(intern(lit("tree-delete"), user_package), func_n2(tree_delete)); reg_fun(intern(lit("tree-root"), user_package), func_n1(tree_root)); reg_fun(intern(lit("tree-begin"), user_package), func_n1(tree_begin)); -- cgit v1.2.3