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
|
{ "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" "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
|
{ "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
|
M: tree new-assoc
|
||||||
2drop <tree> ;
|
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 )
|
: >tree ( assoc -- tree )
|
||||||
T{ tree f f 0 } assoc-clone-like ;
|
T{ tree f f 0 } assoc-clone-like ;
|
||||||
|
|
Loading…
Reference in New Issue