/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.backend.java.scheduling;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import abs.backend.java.lib.runtime.COG;
import abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo;
public class ScheduableTasksFilterFifo implements ScheduableTasksFilter {
@Override
public List<TaskInfo> filter(List<TaskInfo> scheduableTasks) {
List<TaskInfo> result = new ArrayList<TaskInfo>(scheduableTasks.size());
with_next_task :
for (TaskInfo task : scheduableTasks) {
if (!task.hasBeenActivated) {
for (TaskInfo otherTask : scheduableTasks) {
if (otherTask.id < task.id
&& !otherTask.hasBeenActivated
&& getSourceCog(otherTask) == getSourceCog(task)
&& getTargetCog(otherTask) == getTargetCog(otherTask)) {
// there is an earlier unactivated task => skip this task
continue with_next_task;
}
}
}
result.add(task);
}
return result;
}
private COG getTargetCog(TaskInfo task) {
return task.task.getCOG();
}
private COG getSourceCog(TaskInfo task) {
return task.task.getCall().getSource().getCOG();
}
}