diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-10-07 20:16:11 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-10-07 20:16:11 -0700 |
commit | 3666309d5aa374b813f5f7be7cf186375950b7c5 (patch) | |
tree | 3adfad53134b61833bffe8631678d4f3b068b42e | |
parent | 7e8f28fa8c971c388951e8fca923ac856c1ea9e4 (diff) | |
download | txr-3666309d5aa374b813f5f7be7cf186375950b7c5.tar.gz txr-3666309d5aa374b813f5f7be7cf186375950b7c5.tar.bz2 txr-3666309d5aa374b813f5f7be7cf186375950b7c5.zip |
tree: add tree-clear function.
* tree.c (tree_clear): New function.
(tree_init): tree-clear intrinsic registered.
* tree.h (tree_clear): Declared.
-rw-r--r-- | tree.c | 11 | ||||
-rw-r--r-- | tree.h | 1 |
2 files changed, 12 insertions, 0 deletions
@@ -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)); } @@ -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); |