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