1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel assocs dequeues dlists hashtables ;
6 TUPLE: search-dequeue assoc dequeue ;
8 C: <search-dequeue> search-dequeue
10 : <hashed-dlist> ( -- search-dequeue )
11 0 <hashtable> <dlist> <search-dequeue> ;
13 M: search-dequeue dequeue-length dequeue>> dequeue-length ;
15 M: search-dequeue peek-front dequeue>> peek-front ;
17 M: search-dequeue peek-back dequeue>> peek-back ;
19 M: search-dequeue push-front*
20 2dup assoc>> at* [ 2nip ] [
22 [ dequeue>> push-front* ] [ assoc>> ] 2bi
23 [ 2drop ] [ set-at ] 3bi
26 M: search-dequeue push-back*
27 2dup assoc>> at* [ 2nip ] [
29 [ dequeue>> push-back* ] [ assoc>> ] 2bi
30 [ 2drop ] [ set-at ] 3bi
33 M: search-dequeue pop-front*
34 [ [ dequeue>> peek-front ] [ assoc>> ] bi delete-at ]
35 [ dequeue>> pop-front* ]
38 M: search-dequeue pop-back*
39 [ [ dequeue>> peek-back ] [ assoc>> ] bi delete-at ]
40 [ dequeue>> pop-back* ]
43 M: search-dequeue delete-node
44 [ dequeue>> delete-node ]
45 [ [ node-value ] [ assoc>> ] bi* delete-at ] 2bi ;
47 M: search-dequeue clear-dequeue
48 [ dequeue>> clear-dequeue ] [ assoc>> clear-assoc ] bi ;
50 M: search-dequeue dequeue-member?
53 INSTANCE: search-dequeue dequeue