io.directories.search: faster directory traversal.

db4
John Benediktsson 2014-05-20 12:06:11 -07:00
parent ff46966cfb
commit 7e4f2ec618
1 changed files with 8 additions and 3 deletions

View File

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