54 lines
1.3 KiB
Factor
54 lines
1.3 KiB
Factor
! Copyright (C) 2008 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: accessors kernel assocs dequeues dlists hashtables ;
|
|
IN: search-dequeues
|
|
|
|
TUPLE: search-dequeue assoc dequeue ;
|
|
|
|
C: <search-dequeue> search-dequeue
|
|
|
|
: <hashed-dlist> ( -- search-dequeue )
|
|
0 <hashtable> <dlist> <search-dequeue> ;
|
|
|
|
M: search-dequeue dequeue-length dequeue>> dequeue-length ;
|
|
|
|
M: search-dequeue peek-front dequeue>> peek-front ;
|
|
|
|
M: search-dequeue peek-back dequeue>> peek-back ;
|
|
|
|
M: search-dequeue push-front*
|
|
2dup assoc>> at* [ 2nip ] [
|
|
drop
|
|
[ dequeue>> push-front* ] [ assoc>> ] 2bi
|
|
[ 2drop ] [ set-at ] 3bi
|
|
] if ;
|
|
|
|
M: search-dequeue push-back*
|
|
2dup assoc>> at* [ 2nip ] [
|
|
drop
|
|
[ dequeue>> push-back* ] [ assoc>> ] 2bi
|
|
[ 2drop ] [ set-at ] 3bi
|
|
] if ;
|
|
|
|
M: search-dequeue pop-front*
|
|
[ [ dequeue>> peek-front ] [ assoc>> ] bi delete-at ]
|
|
[ dequeue>> pop-front* ]
|
|
bi ;
|
|
|
|
M: search-dequeue pop-back*
|
|
[ [ dequeue>> peek-back ] [ assoc>> ] bi delete-at ]
|
|
[ dequeue>> pop-back* ]
|
|
bi ;
|
|
|
|
M: search-dequeue delete-node
|
|
[ dequeue>> delete-node ]
|
|
[ [ node-value ] [ assoc>> ] bi* delete-at ] 2bi ;
|
|
|
|
M: search-dequeue clear-dequeue
|
|
[ dequeue>> clear-dequeue ] [ assoc>> clear-assoc ] bi ;
|
|
|
|
M: search-dequeue dequeue-member?
|
|
assoc>> key? ;
|
|
|
|
INSTANCE: search-dequeue dequeue
|