Fix bug in delete-node
parent
299dca3200
commit
24de62e335
|
@ -81,3 +81,17 @@ IN: temporary
|
|||
dlist>array
|
||||
] 2keep seq-diff assert-same-elements
|
||||
] unit-test
|
||||
|
||||
[ ] [
|
||||
<dlist> "d" set
|
||||
1 "d" get push-front
|
||||
2 "d" get push-front
|
||||
3 "d" get push-front
|
||||
4 "d" get push-front
|
||||
2 "d" get dlist-delete drop
|
||||
3 "d" get dlist-delete drop
|
||||
4 "d" get dlist-delete drop
|
||||
] unit-test
|
||||
|
||||
[ 1 ] [ "d" get dlist-length ] unit-test
|
||||
[ 1 ] [ "d" get dlist>array length ] unit-test
|
||||
|
|
|
@ -103,12 +103,15 @@ PRIVATE>
|
|||
: dlist-contains? ( quot dlist -- ? )
|
||||
dlist-find nip ; inline
|
||||
|
||||
: unlink-node ( dlist-node -- )
|
||||
dup dlist-node-prev over dlist-node-next set-prev-when
|
||||
dup dlist-node-next swap dlist-node-prev set-next-when ;
|
||||
|
||||
: (delete-node) ( dlist dlist-node -- )
|
||||
{
|
||||
{ [ 2dup >r dlist-front r> = ] [ drop pop-front* ] }
|
||||
{ [ 2dup >r dlist-back r> = ] [ drop pop-back* ] }
|
||||
{ [ t ] [ dup dlist-node-prev swap dlist-node-next set-prev-when
|
||||
dec-length ] }
|
||||
{ [ over dlist-front over eq? ] [ drop pop-front* ] }
|
||||
{ [ over dlist-back over eq? ] [ drop pop-back* ] }
|
||||
{ [ t ] [ unlink-node dec-length ] }
|
||||
} cond ;
|
||||
|
||||
: delete-node* ( quot dlist -- obj/f ? )
|
||||
|
|
Loading…
Reference in New Issue