package datapath.graph;
import datapath.graph.operations.Operation;
import java.util.ArrayList;
import java.util.HashSet;
/**
*
* @author jh
*/
public class StageControllerBuilder {
private Graph graph;
private ArrayList<Stage> stages;
private StageControllerBuilder(Graph graph) {
this.graph = graph;
}
public static void addStageController(Graph graph) {
StageControllerBuilder builder = new StageControllerBuilder(graph);
builder.build();
}
private void build() {
collectStages();
}
private void collectStages() {
int numStages = graph.getLatestSchedule() + 1;
stages = new ArrayList<Stage>(numStages);
for (int i = 0; i < numStages; i++) {
stages.add(new Stage());
}
assert stages.size() == numStages;
for(Operation op : graph.getOperations())
stages.get(op.getSchedule()).addOperation(op);
assert stages.get(numStages-1).numOperations() > 0;
}
private class Stage {
HashSet<Operation> operations;
Stage() {
operations = new HashSet<Operation>();
}
void addOperation(Operation op){
operations.add(op);
}
int numOperations() {
return operations.size();
}
}
}