package xsched.analysis.core; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; //this class collects the results of analyzing one task with respect to its formal parameters public class FormalParameterResult<Instance, TV, SM extends TaskScheduleManager<TV>> { //per formal param we keep a pair of sets that keep tasks that are not ordered before the param and not ordered after the param private final ArrayList<UnorderedTasksSets<Instance, TV, SM>> parameters; public FormalParameterResult(int numParameters) { parameters = new ArrayList<UnorderedTasksSets<Instance, TV, SM>>(numParameters); for(int i = 0; i < numParameters; i++) { parameters.add(new UnorderedTasksSets<Instance, TV, SM>(new HashSet<AnalysisTask<Instance, TV, SM>>(), new HashSet<AnalysisTask<Instance, TV, SM>>())); } } public int numTaskParameters() { return parameters.size(); } public void setNotOrderedBefore(int param, AnalysisTask<Instance, TV, SM> task) { parameters.get(param).tasksNotOrderedBefore.add(task); } public void setTasksNotOrderedBefore(int param, Collection<AnalysisTask<Instance, TV, SM>> tasks) { parameters.get(param).tasksNotOrderedBefore.addAll(tasks); } public void setNotOrderedAfter(int param, AnalysisTask<Instance, TV, SM> task) { parameters.get(param).tasksNotOrderedAfter.add(task); } public void setTasksNotOrderedAfter(int param, Collection<AnalysisTask<Instance, TV, SM>> tasks) { parameters.get(param).tasksNotOrderedAfter.addAll(tasks); } public Set<AnalysisTask<Instance, TV, SM>> tasksNotOrderedBefore(int param) { return parameters.get(param).tasksNotOrderedBefore; } public Set<AnalysisTask<Instance, TV, SM>> tasksNotOrderedAfter(int param) { return parameters.get(param).tasksNotOrderedAfter; } public void mergeWith(FormalParameterResult<Instance, TV, SM> other) { assert parameters.size() == other.parameters.size(); for(int i = 0; i < parameters.size(); i++) { UnorderedTasksSets<Instance, TV, SM> myPair = this.parameters.get(i); UnorderedTasksSets<Instance, TV, SM> otherPair = other.parameters.get(i); myPair.tasksNotOrderedBefore.addAll(otherPair.tasksNotOrderedBefore); myPair.tasksNotOrderedAfter.addAll(otherPair.tasksNotOrderedAfter); } } }