fin refactoring et javadoc instruction queue

This commit is contained in:
MathieuPietri 2019-10-15 15:06:13 +02:00
parent 055979374c
commit 0541b38e50
3 changed files with 61 additions and 49 deletions

View File

@ -12,7 +12,7 @@ public class BasicInstructionQueue implements InstructionQueue {
private boolean emergencyState; private boolean emergencyState;
private int currentFloor; private int currentFloor;
private Direction direction; private Direction currentDirection;
public BasicInstructionQueue() { public BasicInstructionQueue() {
@ -20,22 +20,7 @@ public class BasicInstructionQueue implements InstructionQueue {
downQueue = new ArrayList<Integer>(); downQueue = new ArrayList<Integer>();
emergencyState = false; emergencyState = false;
currentFloor = 0; currentFloor = 0;
direction = Direction.NONE; currentDirection = Direction.NONE;
}
/**
* Adds a new floor to the argument's <b>queue</b> then sorts the elements.
*
* @param queue the list to be sorted.
* @param floor the index of the floor that will be added.
* @param reversed if set to true, the queue will be sorted by descending order.
*/
private void appSort(ArrayList<Integer> queue, int floor, boolean reversed) {
queue.add(floor);
if (reversed)
Collections.sort(queue, Collections.reverseOrder());
else
Collections.sort(queue);
} }
public void computeEvent(Event event) { public void computeEvent(Event event) {
@ -94,7 +79,7 @@ public class BasicInstructionQueue implements InstructionQueue {
*/ */
case EMERGENCYSTOP: case EMERGENCYSTOP:
emergencyState = true; emergencyState = true;
clearQueue(); clearQueues();
break; break;
/* /*
@ -109,7 +94,7 @@ public class BasicInstructionQueue implements InstructionQueue {
*/ */
case REACHEDFLOORSIGNAL: case REACHEDFLOORSIGNAL:
currentFloor = event.getCurrentFloor(); currentFloor = event.getCurrentFloor();
direction = event.getCurrentDirection(); currentDirection = event.getCurrentDirection();
removeInstruction(currentFloor); removeInstruction(currentFloor);
break; break;
@ -118,32 +103,6 @@ public class BasicInstructionQueue implements InstructionQueue {
} }
} }
/**
* Removes one instruction from the queue - has to be called when the elevator
* reaches targeted floor.
*
* @param floor the reached floor
* @param direction the direction of the elevator
*/
private void removeInstruction(int floor) {
switch (direction) {
case UP:
if (upQueue.contains(floor))
upQueue.remove(upQueue.indexOf(floor));
else // we go up to the top of descending queue
downQueue.remove(downQueue.indexOf(floor));
break;
case DOWN:
if (downQueue.contains(floor))
downQueue.remove(downQueue.indexOf(floor));
else // we go down to the bottom of ascending queue
upQueue.remove(upQueue.indexOf(floor));
break;
default:
break;
}
}
/** /**
* Returns the next floor the elevator has to go to * Returns the next floor the elevator has to go to
* *
@ -151,7 +110,7 @@ public class BasicInstructionQueue implements InstructionQueue {
*/ */
public int getNextInstruction() { public int getNextInstruction() {
int nextFloor = -1; int nextFloor = -1;
switch (direction) { switch (currentDirection) {
// get the first element of upQueue that is ABOVE the elevator's current floor // get the first element of upQueue that is ABOVE the elevator's current floor
case UP: case UP:
for (int i = 0; i < upQueue.size() && nextFloor < 0; i++) { for (int i = 0; i < upQueue.size() && nextFloor < 0; i++) {
@ -185,7 +144,60 @@ public class BasicInstructionQueue implements InstructionQueue {
return nextFloor; return nextFloor;
} }
private void clearQueue() { /**
* Adds a new floor to the argument's <b>queue</b> then sorts the elements.
*
* @param queue the list to be sorted.
* @param floor the index of the floor that will be added.
* @param reversed if set to true, the queue will be sorted by descending order.
*/
private void appSort(ArrayList<Integer> queue, int floor, boolean reversed) {
queue.add(floor);
if (reversed)
Collections.sort(queue, Collections.reverseOrder());
else
Collections.sort(queue);
}
/**
* Removes one instruction from the queue - has to be called when the elevator
* reaches targeted floor.
*
* @param floor the reached floor.
* @param currentDirection the direction of the elevator.
*/
private void removeInstruction(int floor) {
switch (currentDirection) {
/*
* Elevator is headed upwards.
*/
case UP:
if (upQueue.contains(floor))
upQueue.remove(upQueue.indexOf(floor));
else
downQueue.remove(downQueue.indexOf(floor));
break;
/*
* Elevator is headed downwards.
*/
case DOWN:
if (downQueue.contains(floor))
downQueue.remove(downQueue.indexOf(floor));
else
upQueue.remove(upQueue.indexOf(floor));
break;
default:
break;
}
}
/**
* Clears both queues.
*/
private void clearQueues() {
downQueue.removeAll(downQueue); downQueue.removeAll(downQueue);
upQueue.removeAll(upQueue); upQueue.removeAll(upQueue);
} }

View File

@ -17,4 +17,4 @@ public interface InstructionQueue {
* @return the next floor if it exists, else -1 * @return the next floor if it exists, else -1
*/ */
public int getNextInstruction(); public int getNextInstruction();
} }

View File

@ -7,7 +7,7 @@ import Events.ReachedFloorEvent;
public class Test { public class Test {
private static boolean running = false; private static boolean running = false;
private static BasicInstructionQueue queue; private static InstructionQueue queue;
private static Direction currentDirection; private static Direction currentDirection;
private static int currentFloor; private static int currentFloor;