package javax.safetycritical.test.safelet;
import javax.realtime.PriorityParameters;
import javax.safetycritical.MissionSequencer;
import javax.safetycritical.PriorityScheduler;
public class SequencerStub2 extends MissionSequencer<MissionStub2> {
public static MissionStub2[] missions;
private int active = 2;
private MissionStub2 miss;
private int activation = 0;
SequencerStub2()
{
super (new PriorityParameters (
PriorityScheduler.instance().getMinPriority()+1),
TestSafelet2.storageParameters_Sequencer);
missions = new MissionStub2[3];
missions[0] = new MissionStub2 (0);
missions[1] = new MissionStub2 (1);
missions[2] = new MissionStub2 (2);
miss = missions[0];
}
public MissionStub2 getNextMission()
{
if (missions[active].terminationPending() && activation > TestSafelet2.SIZE)
{
return null;
}
else
{
active = (active + 1) % missions.length;
miss = missions[active];
TestSafelet2.activationOrder[activation] = miss;
System.out.println("SeqStub2.getNextMission: " + active + "; activation: " + activation);
activation++;
return miss;
}
}
/*@
public behaviour
requires true;
ensures
(\forall int i; 0 <= i && i < TestSafelet2.SIZE;
TestSafelet2.activationOrder[i].missionNo == i % SequencerStub2.missions.length);
@*/
public void cleanUp() {
System.out.println("\nSequencerStub2.cleanUp: ... ");
for (int i = 0; i < TestSafelet2.SIZE; i++) {
System.out.println("Mission " + TestSafelet2.activationOrder[i].missionNo);
}
System.out.println();
}
}