package jqian.slicer.view.global;
import java.io.File;
import java.util.*;
import org.eclipse.core.resources.IFile;
import jqian.slicer.plugin.*;
import jqian.util.metric.*;
/**
* @author bruteforce
*
*/
public class RandomSliceDistribution implements ISliceDistribution {
private static RandomSliceDistribution _instance = new RandomSliceDistribution();
public static ISliceDistribution v(){
return _instance;
}
private RandomSliceDistribution(){
}
public Collection<Integer> getLines(IFile ifile){
File file = WorkbenchHelper.getFile(ifile);
return getLines(file);
}
public Collection<Integer> getLines(File file){
Collection<Integer> slice = _file2slice.get(file);
if(slice==null){
slice = computeRandomSlice(file);
_file2slice.put(file, slice);
}
return slice;
}
public Collection<Integer> getLines(String method){
return null;
}
private Collection<Integer> computeRandomSlice(File file){
Collection<Integer> out = new LinkedList<Integer>();
int line = LineCounter.countFileLine(file);
//keep about slicePercent of the whole file as slice
double slicePercent = Math.random();
if(slicePercent<(2.00/line)){
slicePercent = 0;
return out;
}
for(int i=0;i<line;i++){
double d = Math.random();
if(d<slicePercent){
out.add(i);
}
}
return out;
}
private Map<File,Collection<Integer>> _file2slice = new HashMap<File,Collection<Integer>>();
}