package org.shanbo.feluca.data2;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.shanbo.feluca.data2.Vector.VectorType;
import com.google.common.io.PatternFilenameFilter;
/**
* list of SeqVectorReader, combine vectors into one at each Next()
* @author lgn
*
*/
@Deprecated
public class MultiVectorReader implements VectorReader{
List<SeqVectorReader> readers;
List<Vector> currentVectors;
int[] parts;
VectorType vt;
File dir;
public MultiVectorReader(String dirName, int... parts) throws IOException{
if (parts == null){ //all
File dir = new File(dirName);
File[] listFiles = dir.listFiles(new PatternFilenameFilter(dir.getName() + "\\.v\\.\\d+\\.dat"));
parts = new int[listFiles.length];
for(int i = 0 ; i < listFiles.length; i++){
String blockPart = listFiles[i].getName().split("\\.v\\.")[1];
int blockId = Integer.parseInt(blockPart.substring(0, blockPart.indexOf(".dat")));
parts[i] = blockId;
}
}else{
this.parts = parts;
}
readers = new ArrayList<SeqVectorReader>(parts.length);
currentVectors = new ArrayList<Vector>(parts.length);
for(int i = 0 ; i < parts.length; i++){
readers.add(new SeqVectorReader(dirName, "\\.v\\." + parts[i] +"\\.dat"));
}
vt = readers.get(0).getVectorType();
dir = readers.get(0).getDataDir();
}
public File getDataDir(){
return dir;
}
public int getBlocks(){
return readers.size();
}
private Vector asOne(List<Vector> vectors){
if (vectors == null || vectors.isEmpty()){
return null;
}
Vector newVector = Vector.create(vt);
for(Vector v : vectors){
newVector.swallow(v);
}
return newVector;
}
public Vector getNextVector() throws IOException{
getNextVectors();
if (currentVectors.get(0) == null){
return null;
}else{
return asOne(currentVectors);
}
}
public List<Vector> getNextVectors() throws IOException{
currentVectors.clear();
for(SeqVectorReader vr : readers){
currentVectors.add(vr.getNextVector());
}
return currentVectors;
}
public VectorType getVectorType(){
return vt;
}
public Properties getDataStatistic(){
return readers.get(0).getDataStatistic();
}
public void close(){
for(SeqVectorReader reader : readers){
reader.close();
}
}
}