package immibis.bon.util;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
/** TODO remove this - unused? */
public class RecursiveDirectoryIterator implements Iterable<File> {
private final File root;
private final boolean includeDirs;
public RecursiveDirectoryIterator(File root, boolean includeDirs) {
this.root = root;
this.includeDirs = includeDirs;
}
@Override
public Iterator<File> iterator() {
return new Iterator<File>() {
List<File> stack = new ArrayList<>(); {stack.add(root); skipDirs();}
@Override
public boolean hasNext() {
return !stack.isEmpty();
}
@Override
public File next() {
if(stack.isEmpty())
throw new NoSuchElementException();
File f = stack.remove(stack.size()-1);
if(f.isDirectory())
stack.addAll(Arrays.asList(f.listFiles()));
skipDirs();
return f;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
private void skipDirs() {
if(includeDirs)
return;
while(!stack.isEmpty() && stack.get(stack.size()-1).isDirectory())
next();
}
};
}
}