summaryrefslogtreecommitdiffstats
path: root/tree.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-10-15 08:22:31 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-10-15 08:22:31 -0700
commitc59462de5168b4050ff8517e8215a7692949e85b (patch)
tree86034617a282ef482b923c82034e3f7f4f8724c1 /tree.c
parent738322db5d9a0fecbdce363517308c90a573a48c (diff)
downloadtxr-c59462de5168b4050ff8517e8215a7692949e85b.tar.gz
txr-c59462de5168b4050ff8517e8215a7692949e85b.tar.bz2
txr-c59462de5168b4050ff8517e8215a7692949e85b.zip
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.
Diffstat (limited to 'tree.c')
-rw-r--r--tree.c11
1 files changed, 9 insertions, 2 deletions
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));