Просмотр исходного кода

Make transform_files stateful

Using `retain` instead of `filter` means we can just re-use the same Vec.
Ben S 11 лет назад
Родитель
Сommit
2be30f36f2
3 измененных файлов с 7 добавлено и 7 удалено
  1. 2 1
      src/main.rs
  2. 3 5
      src/options.rs
  3. 2 1
      src/output.rs

+ 2 - 1
src/main.rs

@@ -80,7 +80,8 @@ fn exa(options: &Options) {
 
         match Dir::readdir(&dir_path) {
             Ok(ref dir) => {
-                let files = options.transform_files(dir.files(false));
+                let mut files = dir.files(false);
+                options.transform_files(&mut files);
 
                 // When recursing, add any directories to the dirs stack
                 // backwards: the *last* element of the stack is used each

+ 3 - 5
src/options.rs

@@ -80,7 +80,7 @@ impl Options {
         })
     }
 
-    pub fn transform_files<'a>(&self, files: Vec<File<'a>>) -> Vec<File<'a>> {
+    pub fn transform_files<'a>(&self, files: &mut Vec<File<'a>>) {
         self.filter.transform_files(files)
     }
 
@@ -92,10 +92,10 @@ impl Options {
 
 impl FileFilter {
     /// Transform the files (sorting, reversing, filtering) before listing them.
-    pub fn transform_files<'a>(&self, mut files: Vec<File<'a>>) -> Vec<File<'a>> {
+    pub fn transform_files<'a>(&self, files: &mut Vec<File<'a>>) {
 
         if !self.show_invisibles {
-            files = files.into_iter().filter(|f| !f.is_dotfile()).collect();
+            files.retain(|f| !f.is_dotfile());
         }
 
         match self.sort_field {
@@ -116,8 +116,6 @@ impl FileFilter {
         if self.reverse {
             files.reverse();
         }
-
-        files
     }
 }
 

+ 2 - 1
src/output.rs

@@ -194,7 +194,8 @@ fn get_files(columns: &[Column], cache: &mut OSUsers, recurse: bool, dest: &mut
 
         if recurse {
             if let Some(ref dir) = file.this {
-                let files = filter.transform_files(dir.files(true));
+                let mut files = dir.files(true);
+                filter.transform_files(&mut files);
                 get_files(columns, cache, recurse, dest, files.as_slice(), depth + 1, filter);
             }
         }