From 0759ddcfcaf74a5853ba172af9eff4a4f285a0e3 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 24 Apr 2009 01:18:29 -0500 Subject: [PATCH] fix io.directories.search -- doens't call link-info twice on every file now --- basis/io/directories/search/search.factor | 28 +++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/basis/io/directories/search/search.factor b/basis/io/directories/search/search.factor index 1346fbbdb8..87fbf67110 100755 --- a/basis/io/directories/search/search.factor +++ b/basis/io/directories/search/search.factor @@ -6,15 +6,20 @@ sequences system vocabs.loader locals math namespaces sorting assocs calendar threads ; IN: io.directories.search +: qualified-directory-entries ( path -- seq ) + dup directory-entries + [ [ append-path ] change-name ] with map ; + +: qualified-directory-files ( path -- seq ) + dup directory-files [ append-path ] with map ; + > ] when ] dip + [ qualified-directory-entries ] dip '[ _ [ queue>> ] [ bfs>> ] bi [ push-front ] [ push-back ] if ] each ; @@ -25,8 +30,9 @@ TUPLE: directory-iterator path bfs queue ; : next-file ( iter -- file/f ) dup queue>> deque-empty? [ drop f ] [ - dup queue>> pop-back dup link-info directory? - [ over push-directory next-file ] [ nip ] if + dup queue>> pop-back dup directory? + [ over push-directory next-file ] + [ nip name>> ] if ] if ; :: iterate-directory ( iter quot: ( obj -- ? ) -- obj ) @@ -70,14 +76,6 @@ ERROR: file-not-found ; : find-all-in-directories ( directories bfs? quot: ( obj -- ? ) -- paths/f ) '[ _ _ find-all-files ] map concat ; inline -: qualified-directory-entries ( path -- seq ) - directory-entries - current-directory get '[ [ _ prepend-path ] change-name ] map ; - -: qualified-directory-files ( path -- seq ) - directory-files - current-directory get '[ _ prepend-path ] map ; - : with-qualified-directory-files ( path quot -- ) '[ "" qualified-directory-files @ ] with-directory ; inline @@ -93,7 +91,7 @@ ERROR: file-not-found ; [ name>> dup ] [ directory? ] bi [ directory-size ] [ - [ link-info size-on-disk>> ] [ drop 0 ] recover + [ link-info size-on-disk>> ] [ 2drop 0 ] recover ] if ; : directory-usage ( path -- assoc )