summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tree.c11
-rw-r--r--tree.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/tree.c b/tree.c
index 39424467..544c991d 100644
--- a/tree.c
+++ b/tree.c
@@ -652,6 +652,16 @@ val tree_next(val iter)
return nil;
}
+val tree_clear(val tree)
+{
+ val self = lit("tree-clear");
+ struct tree *tr = coerce(struct tree *, cobj_handle(self, tree, tree_s));
+ cnum oldsize = tr->size;
+ tr->root = nil;
+ tr->size = tr->max_size = 0;
+ return oldsize ? num(oldsize) : nil;
+}
+
void tree_init(void)
{
tree_s = intern(lit("tree"), user_package);
@@ -672,5 +682,6 @@ void tree_init(void)
reg_fun(intern(lit("tree-root"), user_package), func_n1(tree_root));
reg_fun(intern(lit("tree-begin"), user_package), func_n1(tree_begin));
reg_fun(intern(lit("tree-next"), user_package), func_n1(tree_next));
+ reg_fun(intern(lit("tree-clear"), user_package), func_n1(tree_clear));
reg_var(tree_fun_whitelist_s, list(identity_s, equal_s, less_s, nao));
}
diff --git a/tree.h b/tree.h
index 871c80bb..94270b4b 100644
--- a/tree.h
+++ b/tree.h
@@ -39,4 +39,5 @@ val treep(val obj);
val tree_insert_node(val tree, val node);
val tree_begin(val tree);
val tree_next(val iter);
+val tree_clear(val tree);
void tree_init(void);