]> gitweb.factorcode.org Git - factor.git/blob - core/dequeues/dequeues.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / core / dequeues / dequeues.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel sequences math ;
4 IN: dequeues
5
6 GENERIC: push-front* ( obj dequeue -- node )
7 GENERIC: push-back* ( obj dequeue -- node )
8 GENERIC: peek-front ( dequeue -- obj )
9 GENERIC: peek-back ( dequeue -- obj )
10 GENERIC: pop-front* ( dequeue -- )
11 GENERIC: pop-back* ( dequeue -- )
12 GENERIC: delete-node ( node dequeue -- )
13 GENERIC: dequeue-length ( dequeue -- n )
14 GENERIC: dequeue-member? ( value dequeue -- ? )
15 GENERIC: clear-dequeue ( dequeue -- )
16 GENERIC: node-value ( node -- value )
17
18 : dequeue-empty? ( dequeue -- ? )
19     dequeue-length zero? ;
20
21 : push-front ( obj dequeue -- )
22     push-front* drop ;
23
24 : push-all-front ( seq dequeue -- )
25     [ push-front ] curry each ;
26
27 : push-back ( obj dequeue -- )
28     push-back* drop ;
29
30 : push-all-back ( seq dequeue -- )
31     [ push-back ] curry each ;
32
33 : pop-front ( dequeue -- obj )
34     [ peek-front ] [ pop-front* ] bi ;
35
36 : pop-back ( dequeue -- obj )
37     [ peek-back ] [ pop-back* ] bi ;
38
39 : slurp-dequeue ( dequeue quot -- )
40     [ drop [ dequeue-empty? not ] curry ]
41     [ [ pop-back ] prepose curry ] 2bi [ ] while ; inline
42
43 MIXIN: dequeue