42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2008, 2009 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel sequences math fry ;
 | 
						|
IN: deques
 | 
						|
 | 
						|
GENERIC: push-front* ( obj deque -- node )
 | 
						|
GENERIC: push-back* ( obj deque -- node )
 | 
						|
GENERIC: peek-front ( deque -- obj )
 | 
						|
GENERIC: peek-back ( deque -- obj )
 | 
						|
GENERIC: pop-front* ( deque -- )
 | 
						|
GENERIC: pop-back* ( deque -- )
 | 
						|
GENERIC: delete-node ( node deque -- )
 | 
						|
GENERIC: deque-member? ( value deque -- ? )
 | 
						|
GENERIC: clear-deque ( deque -- )
 | 
						|
GENERIC: node-value ( node -- value )
 | 
						|
GENERIC: deque-empty? ( deque -- ? )
 | 
						|
 | 
						|
: push-front ( obj deque -- )
 | 
						|
    push-front* drop ;
 | 
						|
 | 
						|
: push-all-front ( seq deque -- )
 | 
						|
    [ push-front ] curry each ;
 | 
						|
 | 
						|
: push-back ( obj deque -- )
 | 
						|
    push-back* drop ;
 | 
						|
 | 
						|
: push-all-back ( seq deque -- )
 | 
						|
    [ push-back ] curry each ;
 | 
						|
 | 
						|
: pop-front ( deque -- obj )
 | 
						|
    [ peek-front ] [ pop-front* ] bi ;
 | 
						|
 | 
						|
: pop-back ( deque -- obj )
 | 
						|
    [ peek-back ] [ pop-back* ] bi ;
 | 
						|
 | 
						|
: slurp-deque ( deque quot -- )
 | 
						|
    [ drop '[ _ deque-empty? not ] ]
 | 
						|
    [ '[ _ pop-back @ ] ]
 | 
						|
    2bi while ; inline
 | 
						|
 | 
						|
MIXIN: deque
 |