package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.step;
import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.AllocationTaskView;
import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.DreamTaskRecord;
/**
* Created with IntelliJ IDEA.
* User: masoud
* Date: 12/7/13
* Time: 10:37 PM
* * ------------------------------------------------------------------------------------------------------------<br/>
* <pre>
* Old \ New |Poor |Rich |Middle
* Change |>=0 |< 0 |>=0 |< 0 |>=0 |< 0
* Poor |A+=c,R+=c/2 |A=A,R-=c |A-=c/2,R+=c/2 |A+=c/2,R=R |A=A,R=R |A=A,R=R
* Rich |A=A,R+=c/2 |A+=c/2,R-=c/2 |A-=c,R=R |A+=c/2,R+=c |A=A,R=R |A=A,R=R
* Middle |A=A,R+=c/2 |A+=c/2,R-=c/2 |A-=c/2,R+=c/2 |A+=c/2,R=R |A=A,R=R |A=A,R=R
* c can be summed over delayed ones
* </pre>
*/
public class MIMDStepUpdater2 extends RichPoorStepUpdater {
@Override
protected void finishForTask(DreamTaskRecord taskRecord) {
}
@Override
protected void MiddleGavePoor(DreamTaskRecord taskRecord, int change) {
RichGavePoor(taskRecord, change);
}
@Override
protected void MiddleGotMiddle(DreamTaskRecord taskRecord, int change) {
}
@Override
protected void MiddleGotRich(DreamTaskRecord taskRecord, int change) {
PoorGotRich(taskRecord, change);
}
@Override
protected void MiddleGaveRich(DreamTaskRecord taskRecord, int change) {
PoorGaveRich(taskRecord, change);
}
@Override
protected void MiddleGaveMiddle(DreamTaskRecord taskRecord, int change) {
}
@Override
protected void MiddleGotPoor(DreamTaskRecord taskRecord, int change) {
RichGotPoor(taskRecord, change);
}
@Override
protected void RichGotMiddle(DreamTaskRecord taskRecord, int change) {
}
@Override
protected void PoorGaveMiddle(DreamTaskRecord taskRecord, int change) {
}
@Override
protected void PrepareForTask(AllocationTaskView task) {
}
@Override
protected void prepare() {
}
@Override
protected void finishing() {
}
@Override
protected void RichGaveMiddle(DreamTaskRecord taskRecord, int change) {
}
@Override
protected void PoorGotMiddle(DreamTaskRecord taskRecord, int change) {
}
@Override
protected void RichGavePoor(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep() + change / 2);
taskRecord.setReductionStep(taskRecord.getReductionStep() - change / 2);
}
@Override
protected void RichGotPoor(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep());
taskRecord.setReductionStep(taskRecord.getReductionStep() + change / 2);
}
@Override
protected void PoorGavePoor(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep());
taskRecord.setReductionStep(taskRecord.getReductionStep() - change);
}
@Override
protected void PoorGotPoor(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep() + change);
taskRecord.setReductionStep(taskRecord.getReductionStep() + change / 2);
}
@Override
protected void PoorGaveRich(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep() + change / 2);
taskRecord.setReductionStep(taskRecord.getReductionStep());
}
@Override
protected void PoorGotRich(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep() - change / 2);
taskRecord.setReductionStep(taskRecord.getReductionStep() + change / 2);
}
@Override
protected void RichGotRich(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep() - change);
taskRecord.setReductionStep(taskRecord.getReductionStep());
}
@Override
protected void RichGaveRich(DreamTaskRecord taskRecord, int change) {
taskRecord.setAdditionStep(taskRecord.getAdditionStep() + change / 2);
taskRecord.setReductionStep(taskRecord.getReductionStep() + change);
}
}