trees, change M\ tree clone to keep the shape of the tree
Without this, all base class and splay trees were becoming linked lists after cloning..char-rename
parent
79a28e130e
commit
29ebeb5a26
|
@ -25,3 +25,14 @@ IN: trees.tests
|
|||
{ "replaced four" } [ test-tree 9 over delete-at 4 of ] unit-test
|
||||
{ "nine" "replaced four" } [ test-tree 7 over delete-at 9 over at 4 rot at ] unit-test
|
||||
{ "nine" } [ test-tree 7 over delete-at 4 over delete-at 9 of ] unit-test
|
||||
|
||||
! test that cloning doesn't reshape the tree
|
||||
{ TREE{
|
||||
{ 7 "seven" }
|
||||
{ 9 "nine" }
|
||||
{ 4 "four" }
|
||||
} } [ TREE{
|
||||
{ 7 "seven" }
|
||||
{ 9 "nine" }
|
||||
{ 4 "four" }
|
||||
} clone ] unit-test
|
||||
|
|
|
@ -202,7 +202,18 @@ M: tree delete-at
|
|||
M: tree new-assoc
|
||||
2drop <tree> ;
|
||||
|
||||
M: tree clone dup assoc-clone-like ;
|
||||
<PRIVATE
|
||||
|
||||
: clone-nodes ( node -- node' )
|
||||
dup [
|
||||
clone
|
||||
[ clone-nodes ] change-left
|
||||
[ clone-nodes ] change-right
|
||||
] when ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
M: tree clone (clone) [ clone-nodes ] change-root ;
|
||||
|
||||
: >tree ( assoc -- tree )
|
||||
T{ tree f f 0 } assoc-clone-like ;
|
||||
|
|
Loading…
Reference in New Issue