54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2008 Slava Pestov.
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: accessors kernel assocs dequeues dlists hashtables ;
							 | 
						||
| 
								 | 
							
								IN: search-dequeues
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TUPLE: search-dequeue assoc dequeue ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C: <search-dequeue> search-dequeue
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: <hashed-dlist> ( -- search-dequeue )
							 | 
						||
| 
								 | 
							
								    0 <hashtable> <dlist> <search-dequeue> ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue dequeue-length dequeue>> dequeue-length ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue peek-front dequeue>> peek-front ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue peek-back dequeue>> peek-back ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue push-front*
							 | 
						||
| 
								 | 
							
								    2dup assoc>> at* [ 2nip ] [
							 | 
						||
| 
								 | 
							
								        drop
							 | 
						||
| 
								 | 
							
								        [ dequeue>> push-front* ] [ assoc>> ] 2bi
							 | 
						||
| 
								 | 
							
								        [ 2drop ] [ set-at ] 3bi
							 | 
						||
| 
								 | 
							
								    ] if ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue push-back*
							 | 
						||
| 
								 | 
							
								    2dup assoc>> at* [ 2nip ] [
							 | 
						||
| 
								 | 
							
								        drop
							 | 
						||
| 
								 | 
							
								        [ dequeue>> push-back* ] [ assoc>> ] 2bi
							 | 
						||
| 
								 | 
							
								        [ 2drop ] [ set-at ] 3bi
							 | 
						||
| 
								 | 
							
								    ] if ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue pop-front*
							 | 
						||
| 
								 | 
							
								    [ [ dequeue>> peek-front ] [ assoc>> ] bi delete-at ]
							 | 
						||
| 
								 | 
							
								    [ dequeue>> pop-front* ]
							 | 
						||
| 
								 | 
							
								    bi ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue pop-back*
							 | 
						||
| 
								 | 
							
								    [ [ dequeue>> peek-back ] [ assoc>> ] bi delete-at ]
							 | 
						||
| 
								 | 
							
								    [ dequeue>> pop-back* ]
							 | 
						||
| 
								 | 
							
								    bi ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue delete-node
							 | 
						||
| 
								 | 
							
								    [ dequeue>> delete-node ]
							 | 
						||
| 
								 | 
							
								    [ [ node-value ] [ assoc>> ] bi* delete-at ] 2bi ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue clear-dequeue
							 | 
						||
| 
								 | 
							
								    [ dequeue>> clear-dequeue ] [ assoc>> clear-assoc ] bi ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: search-dequeue dequeue-member?
							 | 
						||
| 
								 | 
							
								    assoc>> key? ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INSTANCE: search-dequeue dequeue
							 |