package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation; import java.util.Collection; /** * Created with IntelliJ IDEA. * User: masoud * Date: 9/13/13 * Time: 10:49 PM */ public class PriorityDropPolicy { protected final int dropEpochs; protected int notHelpingEpochs = 0; protected boolean potentialDrop = false; public PriorityDropPolicy(boolean potentialDrop, int dropEpochs) { this.potentialDrop = potentialDrop; this.dropEpochs = dropEpochs; } public PriorityDropPolicy(int dropEpochs) { this.dropEpochs = dropEpochs; } public int getDropEpochs() { return dropEpochs; } @Override public String toString() { return "PriorityDropPolicy{" + "notHelpingEpochs=" + notHelpingEpochs + '}'; } public TaskRecord2 checkForDrop(boolean notHelpedPoor, Collection<? extends TaskRecord2> tasks) { if (notHelpedPoor) { notHelpingEpochs++; } else { if (notHelpingEpochs > 0) { if (potentialDrop) { notHelpingEpochs--; } else { notHelpingEpochs = 0; } } } if (notHelpingEpochs >= dropEpochs) { if (notHelpingEpochs > 0) { if (potentialDrop) { notHelpingEpochs--; } else { notHelpingEpochs = 0; } } //dream return getDropCandidate(tasks); } return null; } public TaskRecord2 getDropCandidate(Collection<? extends TaskRecord2> tasks) { TaskRecord2 minPriorityTask = null; for (TaskRecord2 taskRecord : tasks) { if (minPriorityTask == null || minPriorityTask.getDropPriority() > taskRecord.getDropPriority()) { minPriorityTask = taskRecord; } } return minPriorityTask; } }