diff options
-rw-r--r-- | tests/010/tree.tl | 8 | ||||
-rw-r--r-- | tree.c | 13 | ||||
-rw-r--r-- | tree.h | 1 | ||||
-rw-r--r-- | txr.1 | 17 |
4 files changed, 39 insertions, 0 deletions
diff --git a/tests/010/tree.tl b/tests/010/tree.tl index fde11300..6a1d4aa1 100644 --- a/tests/010/tree.tl +++ b/tests/010/tree.tl @@ -111,3 +111,11 @@ (tree-delete tr 17) 17 (tree-delete tr 18) 18 (tree-delete tr 19) 19) + +(set *tree-fun-whitelist* [list* '= '< *tree-fun-whitelist*]) + +(let ((tr [tree '(1 2 3) identity < =])) + (mtest + tr #T((identity < =) 1 2 3) + (copy-search-tree tr) #T((identity < =) 1 2 3) + (make-similar-tree tr) #T((identity < =)))) @@ -711,6 +711,18 @@ val copy_search_tree(val tree) return ntree; } +val make_similar_tree(val tree) +{ + val self = lit("make-similar-tree"); + struct tree *ntr = coerce(struct tree *, malloc(sizeof *ntr)); + struct tree *otr = coerce(struct tree *, cobj_handle(self, tree, tree_s)); + val ntree = cobj(coerce(mem_t *, ntr), tree_s, &tree_ops); + *ntr = *otr; + ntr->root = nil; + ntr->size = ntr->max_size = 0; + return ntree; +} + val treep(val obj) { return tnil(type(obj) == COBJ && obj->co.cls == tree_s); @@ -834,6 +846,7 @@ void tree_init(void) reg_fun(tree_s, func_n4o(tree, 0)); reg_fun(tree_construct_s, func_n2(tree_construct)); reg_fun(intern(lit("copy-search-tree"), user_package), func_n1(copy_search_tree)); + reg_fun(intern(lit("make-similar-tree"), user_package), func_n1(make_similar_tree)); reg_fun(intern(lit("treep"), user_package), func_n1(treep)); reg_fun(intern(lit("tree-insert-node"), user_package), func_n2(tree_insert_node)); reg_fun(intern(lit("tree-insert"), user_package), func_n2(tree_insert)); @@ -40,6 +40,7 @@ val set_key(val node, val nkey); val copy_tnode(val node); val tree(val keys, val key_fn, val less_fn, val equal_fn); val copy_search_tree(val tree); +val make_similar_tree(val tree); val treep(val obj); val tree_insert_node(val tree, val node); val tree_begin(val tree); @@ -51774,6 +51774,23 @@ and contains the same elements. The nodes held inside the new tree are freshly allocated, but their key objects are shared with the original tree. +.coNP Function @ make-similar-tree +.synb +.mets (make-similar-tree << tree ) +.syne +.desc +The +.code copy-search-tree +returns a new, empty search tree object. + +The +.meta tree +argument must be an object of type +.codn tree . + +The returned object has the same key abstraction functions as +.metn tree . + .coNP Functions @ tree-begin and @ tree-begin-at .synb .mets (tree-begin < tree ) |