package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.drop; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.PriorityDropPolicy; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.TaskRecord2; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.DreamTaskRecord; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.DummyTaskRecord; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.ThresholdGuaranteeAlgorithm2; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * Created with IntelliJ IDEA. * User: masoud * Date: 9/24/13 * Time: 6:55 PM <br/> * Implement the local drop policy. */ public abstract class DropFlagRaiser { protected final ThresholdGuaranteeAlgorithm2 algorithm; protected final PriorityDropPolicy dropPolicy; public DropFlagRaiser(ThresholdGuaranteeAlgorithm2 algorithm, PriorityDropPolicy dropPolicy) { this.algorithm = algorithm; this.dropPolicy = dropPolicy; } public List<DreamTaskRecord> checkDrop(Collection<DreamTaskRecord> poorTaskRecords, Collection<DreamTaskRecord> richTaskRecords, DummyTaskRecord dummyTaskRecord) { ArrayList<DreamTaskRecord> output = new ArrayList<>(); boolean raised = raise2(poorTaskRecords, richTaskRecords, dummyTaskRecord); TaskRecord2 dropped = dropPolicy.checkForDrop(raised, algorithm.getTasks()); if (dropped != null) { output.add((DreamTaskRecord) dropped); } return output; } protected abstract boolean raise2(Collection<DreamTaskRecord> poorTaskRecords, Collection<DreamTaskRecord> richTaskRecords, DummyTaskRecord dummyTaskRecord); }