io.directories.search: faster directory traversal.
							parent
							
								
									ff46966cfb
								
							
						
					
					
						commit
						7e4f2ec618
					
				| 
						 | 
				
			
			@ -2,8 +2,8 @@
 | 
			
		|||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors arrays assocs continuations deques dlists fry
 | 
			
		||||
io.backend io.directories io.files.info io.pathnames kernel
 | 
			
		||||
locals math sequences sorting system unicode.case vocabs
 | 
			
		||||
vocabs.loader ;
 | 
			
		||||
kernel.private locals math sequences sorting strings system
 | 
			
		||||
unicode.case vocabs vocabs.loader ;
 | 
			
		||||
IN: io.directories.search
 | 
			
		||||
 | 
			
		||||
: qualified-directory-entries ( path -- seq )
 | 
			
		||||
| 
						 | 
				
			
			@ -22,9 +22,13 @@ IN: io.directories.search
 | 
			
		|||
 | 
			
		||||
<PRIVATE
 | 
			
		||||
 | 
			
		||||
TUPLE: directory-iterator path bfs queue ;
 | 
			
		||||
TUPLE: directory-iterator
 | 
			
		||||
{ path string }
 | 
			
		||||
{ bfs boolean }
 | 
			
		||||
{ queue dlist } ;
 | 
			
		||||
 | 
			
		||||
: push-directory-entries ( path iter -- )
 | 
			
		||||
    { directory-iterator } declare
 | 
			
		||||
    [ [ qualified-directory-entries ] [ 2drop f ] recover ] dip '[
 | 
			
		||||
        _ [ queue>> ] [ bfs>> ] bi
 | 
			
		||||
        [ push-front ] [ push-back ] if
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +39,7 @@ TUPLE: directory-iterator path bfs queue ;
 | 
			
		|||
    dup path>> over push-directory-entries ;
 | 
			
		||||
 | 
			
		||||
: next-directory-entry ( iter -- directory-entry/f )
 | 
			
		||||
    { directory-iterator } declare
 | 
			
		||||
    dup queue>> deque-empty? [ drop f ] [
 | 
			
		||||
        dup queue>> pop-back
 | 
			
		||||
        dup directory?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue