package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation; import edu.usc.enl.dynamicmeasurement.model.monitorpoint.MonitorPoint; import org.w3c.dom.Element; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * Created with IntelliJ IDEA. * User: masoud * Date: 8/1/13 * Time: 12:50 PM <br/> * Equal allocation without drop */ public class DynamicNoDropAlgorithm extends MultiTaskResourceControl { private final int maxResource; private List<TaskRecord2> taskRecords; public DynamicNoDropAlgorithm(Element element, MonitorPoint monitorPoint) { maxResource = monitorPoint.getCapacity(); taskRecords = new LinkedList<>(); } @Override public void allocate() { if (taskRecords.size() > 0) { int share = maxResource / taskRecords.size(); for (TaskRecord2 taskRecord : taskRecords) { taskRecord.getTask().setResourceShare(share); } } } @Override public boolean addTask(AllocationTaskView task) { taskRecords.add(new TaskRecord2(task, -taskRecords.size())); int resourceShare = maxResource / taskRecords.size(); for (TaskRecord2 task1 : taskRecords) { task1.getTask().setResourceShare(resourceShare); } return true; } @Override public void removeTask(AllocationTaskView task) { for (Iterator<TaskRecord2> iterator = taskRecords.iterator(); iterator.hasNext(); ) { TaskRecord2 next = iterator.next(); if (next.getTask().equals(task)) { iterator.remove(); break; } } for (TaskRecord2 taskRecord : taskRecords) { taskRecord.getTask().setResourceShare(maxResource / taskRecords.size()); } task.setResourceShare(0); } }