1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel sequences math ;
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 )
18 : dequeue-empty? ( dequeue -- ? )
19 dequeue-length zero? ;
21 : push-front ( obj dequeue -- )
24 : push-all-front ( seq dequeue -- )
25 [ push-front ] curry each ;
27 : push-back ( obj dequeue -- )
30 : push-all-back ( seq dequeue -- )
31 [ push-back ] curry each ;
33 : pop-front ( dequeue -- obj )
34 [ peek-front ] [ pop-front* ] bi ;
36 : pop-back ( dequeue -- obj )
37 [ peek-back ] [ pop-back* ] bi ;
39 : slurp-dequeue ( dequeue quot -- )
40 [ drop [ dequeue-empty? not ] curry ]
41 [ [ pop-back ] prepose curry ] 2bi [ ] while ; inline