From 5fb2e2942a79665d6f17e6f1d4419bd697303dac Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 7 Oct 2019 20:16:11 -0700 Subject: tree: add tree-clear function. * tree.c (tree_clear): New function. (tree_init): tree-clear intrinsic registered. * tree.h (tree_clear): Declared. --- tree.c | 11 +++++++++++ tree.h | 1 + 2 files changed, 12 insertions(+) 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); -- cgit v1.2.3