Warteschlangen auf Basis von Ringpuffern II

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

Requests.om
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;

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1999 Andreas Borchert, in HTML konvertiert am 29.06.1999