comparison src/org/tmatesoft/hg/util/FileWalker.java @ 287:ed6b74a58c66

Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Wed, 07 Sep 2011 09:33:27 +0200
parents 1ec6b327a6ac
children 7f27122011c3
comparison
equal deleted inserted replaced
286:954763c82cc3 287:ed6b74a58c66
30 private final File startDir; 30 private final File startDir;
31 private final Path.Source pathHelper; 31 private final Path.Source pathHelper;
32 private final LinkedList<File> dirQueue; 32 private final LinkedList<File> dirQueue;
33 private final LinkedList<File> fileQueue; 33 private final LinkedList<File> fileQueue;
34 private final Path.Matcher scope; 34 private final Path.Matcher scope;
35 private File nextFile; 35 private RegularFileInfo nextFile;
36 private Path nextPath; 36 private Path nextPath;
37 37
38 public FileWalker(File dir, Path.Source pathFactory) { 38 public FileWalker(File dir, Path.Source pathFactory) {
39 this(dir, pathFactory, null); 39 this(dir, pathFactory, null);
40 } 40 }
58 58
59 public void reset() { 59 public void reset() {
60 fileQueue.clear(); 60 fileQueue.clear();
61 dirQueue.clear(); 61 dirQueue.clear();
62 dirQueue.add(startDir); 62 dirQueue.add(startDir);
63 nextFile = null; 63 nextFile = new RegularFileInfo();
64 nextPath = null; 64 nextPath = null;
65 } 65 }
66 66
67 public boolean hasNext() { 67 public boolean hasNext() {
68 return fill(); 68 return fill();
70 70
71 public void next() { 71 public void next() {
72 if (!fill()) { 72 if (!fill()) {
73 throw new NoSuchElementException(); 73 throw new NoSuchElementException();
74 } 74 }
75 nextFile = fileQueue.removeFirst(); 75 File next = fileQueue.removeFirst();
76 nextPath = pathHelper.path(nextFile.getPath()); 76 nextFile.init(next);
77 nextPath = pathHelper.path(next.getPath());
77 } 78 }
78 79
79 public Path name() { 80 public Path name() {
80 return nextPath; 81 return nextPath;
81 } 82 }
82 83
83 public File file() { 84 public FileInfo file() {
84 return nextFile; 85 return nextFile;
85 } 86 }
86 87
87 public boolean inScope(Path file) { 88 public boolean inScope(Path file) {
88 /* by default, no limits, all files are of interest */ 89 /* by default, no limits, all files are of interest */