97 lines
3.3 KiB
Java
97 lines
3.3 KiB
Java
// PART OF THE MACHINE SIMULATION. DO NOT CHANGE.
|
|
|
|
package nachos.machine;
|
|
|
|
/**
|
|
* A set of controls that can be used by an elevator controller.
|
|
*/
|
|
public interface ElevatorControls {
|
|
/**
|
|
* Return the number of floors in the elevator bank. If <i>n</i> is the
|
|
* number of floors in the bank, then the floors are numbered <i>0</i>
|
|
* (the ground floor) through <i>n - 1</i> (the top floor).
|
|
*
|
|
* @return the number of floors in the bank.
|
|
*/
|
|
public int getNumFloors();
|
|
|
|
/**
|
|
* Return the number of elevators in the elevator bank. If <i>n</i> is the
|
|
* number of elevators in the bank, then the elevators are numbered
|
|
* <i>0</i> through <i>n - 1</i>.
|
|
*
|
|
* @return the numbe rof elevators in the bank.
|
|
*/
|
|
public int getNumElevators();
|
|
|
|
/**
|
|
* Set the elevator interrupt handler. This handler will be called when an
|
|
* elevator event occurs, and when all the riders have reaced their
|
|
* destinations.
|
|
*
|
|
* @param handler the elevator interrupt handler.
|
|
*/
|
|
public void setInterruptHandler(Runnable handler);
|
|
|
|
/**
|
|
* Open an elevator's doors.
|
|
*
|
|
* @param elevator which elevator's doors to open.
|
|
*/
|
|
public void openDoors(int elevator);
|
|
|
|
/**
|
|
* Close an elevator's doors.
|
|
*
|
|
* @param elevator which elevator's doors to close.
|
|
*/
|
|
public void closeDoors(int elevator);
|
|
|
|
/**
|
|
* Move an elevator to another floor. The elevator's doors must be closed.
|
|
* If the elevator is already moving and cannot safely stop at the
|
|
* specified floor because it has already passed or is about to pass the
|
|
* floor, fails and returns <tt>false</tt>. If the elevator is already
|
|
* stopped at the specified floor, returns <tt>false</tt>.
|
|
*
|
|
* @param floor the floor to move to.
|
|
* @param elevator the elevator to move.
|
|
* @return <tt>true</tt> if the elevator's destination was changed.
|
|
*/
|
|
public boolean moveTo(int floor, int elevator);
|
|
|
|
/**
|
|
* Return the current location of the elevator. If the elevator is in
|
|
* motion, the returned value will be within one of the exact location.
|
|
*
|
|
* @param elevator the elevator to locate.
|
|
* @return the floor the elevator is on.
|
|
*/
|
|
public int getFloor(int elevator);
|
|
|
|
/**
|
|
* Set which direction the elevator bank will show for this elevator's
|
|
* display. The <i>direction</i> argument should be one of the <i>dir*</i>
|
|
* constants in the <tt>ElevatorBank</tt> class.
|
|
*
|
|
* @param elevator the elevator whose direction display to set.
|
|
* @param direction the direction to show (up, down, or neither).
|
|
*/
|
|
public void setDirectionDisplay(int elevator, int direction);
|
|
|
|
/**
|
|
* Call when the elevator controller is finished.
|
|
*/
|
|
public void finish();
|
|
|
|
/**
|
|
* Return the next event in the event queue. Note that there may be
|
|
* multiple events pending when an elevator interrupt occurs, so this
|
|
* method should be called repeatedly until it returns <tt>null</tt>.
|
|
*
|
|
* @return the next event, or <tt>null</tt> if no further events are
|
|
* currently pending.
|
|
*/
|
|
public ElevatorEvent getNextEvent();
|
|
}
|