PROCEDURE InitQueue(VAR queue: QueueOfRequests);
BEGIN
queue.length := 0; queue.in := 0; queue.out := 0;
END InitQueue;
PROCEDURE AddRequest(VAR queue: QueueOfRequests;
request: Request);
BEGIN
ASSERT(queue.length < capacity);
queue.ring[queue.in] := request;
queue.in := (queue.in + 1) MOD capacity;
INC(queue.length);
END AddRequest;
PROCEDURE RemoveRequest(VAR queue: QueueOfRequests;
VAR request: Request);
BEGIN
ASSERT(queue.length > 0);
request := queue.ring[queue.out];
queue.out := (queue.out + 1) MOD capacity;
DEC(queue.length);
END RemoveRequest;
PROCEDURE Length(queue: QueueOfRequests) : INTEGER;
BEGIN
RETURN queue.length
END Length;
PROCEDURE Full(queue: QueueOfRequests) : BOOLEAN;
BEGIN
RETURN queue.length = capacity
END Full;
|