]> gitweb.factorcode.org Git - factor.git/blob - basis/search-dequeues/search-dequeues.factor
Create basis vocab root
[factor.git] / basis / search-dequeues / search-dequeues.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel assocs dequeues dlists hashtables ;
4 IN: search-dequeues
5
6 TUPLE: search-dequeue assoc dequeue ;
7
8 C: <search-dequeue> search-dequeue
9
10 : <hashed-dlist> ( -- search-dequeue )
11     0 <hashtable> <dlist> <search-dequeue> ;
12
13 M: search-dequeue dequeue-length dequeue>> dequeue-length ;
14
15 M: search-dequeue peek-front dequeue>> peek-front ;
16
17 M: search-dequeue peek-back dequeue>> peek-back ;
18
19 M: search-dequeue push-front*
20     2dup assoc>> at* [ 2nip ] [
21         drop
22         [ dequeue>> push-front* ] [ assoc>> ] 2bi
23         [ 2drop ] [ set-at ] 3bi
24     ] if ;
25
26 M: search-dequeue push-back*
27     2dup assoc>> at* [ 2nip ] [
28         drop
29         [ dequeue>> push-back* ] [ assoc>> ] 2bi
30         [ 2drop ] [ set-at ] 3bi
31     ] if ;
32
33 M: search-dequeue pop-front*
34     [ [ dequeue>> peek-front ] [ assoc>> ] bi delete-at ]
35     [ dequeue>> pop-front* ]
36     bi ;
37
38 M: search-dequeue pop-back*
39     [ [ dequeue>> peek-back ] [ assoc>> ] bi delete-at ]
40     [ dequeue>> pop-back* ]
41     bi ;
42
43 M: search-dequeue delete-node
44     [ dequeue>> delete-node ]
45     [ [ node-value ] [ assoc>> ] bi* delete-at ] 2bi ;
46
47 M: search-dequeue clear-dequeue
48     [ dequeue>> clear-dequeue ] [ assoc>> clear-assoc ] bi ;
49
50 M: search-dequeue dequeue-member?
51     assoc>> key? ;
52
53 INSTANCE: search-dequeue dequeue