45 lines
1.2 KiB
Factor
45 lines
1.2 KiB
Factor
|
! Copyright (C) 2008 Slava Pestov.
|
||
|
! See http://factorcode.org/license.txt for BSD license.
|
||
|
USING: kernel sequences math ;
|
||
|
IN: dequeues
|
||
|
|
||
|
GENERIC: push-front* ( obj dequeue -- node )
|
||
|
GENERIC: push-back* ( obj dequeue -- node )
|
||
|
GENERIC: peek-front ( dequeue -- obj )
|
||
|
GENERIC: peek-back ( dequeue -- obj )
|
||
|
GENERIC: pop-front* ( dequeue -- )
|
||
|
GENERIC: pop-back* ( dequeue -- )
|
||
|
GENERIC: delete-node ( node dequeue -- )
|
||
|
GENERIC: dequeue-length ( dequeue -- n )
|
||
|
GENERIC: dequeue-member? ( value dequeue -- ? )
|
||
|
GENERIC: clear-dequeue ( dequeue -- )
|
||
|
GENERIC: node-value ( node -- value )
|
||
|
|
||
|
: dequeue-empty? ( dequeue -- ? )
|
||
|
dequeue-length zero? ;
|
||
|
|
||
|
: push-front ( obj dequeue -- )
|
||
|
push-front* drop ;
|
||
|
|
||
|
: push-all-front ( seq dequeue -- )
|
||
|
[ push-front ] curry each ;
|
||
|
|
||
|
: push-back ( obj dequeue -- )
|
||
|
push-back* drop ;
|
||
|
|
||
|
: push-all-back ( seq dequeue -- )
|
||
|
[ push-back ] curry each ;
|
||
|
|
||
|
: pop-front ( dequeue -- obj )
|
||
|
[ peek-front ] [ pop-front* ] bi ;
|
||
|
|
||
|
: pop-back ( dequeue -- obj )
|
||
|
[ peek-back ] [ pop-back* ] bi ;
|
||
|
|
||
|
: slurp-dequeue ( dequeue quot -- )
|
||
|
over dequeue-empty? [ 2drop ] [
|
||
|
[ [ pop-back ] dip call ] [ slurp-dequeue ] 2bi
|
||
|
] if ; inline
|
||
|
|
||
|
MIXIN: dequeue
|