Go to Package Interface

PACKAGE BODY Queues_Generic IS
------------------------------------------------------------------------
--| Body of Generic Queues Package, Array Implementation
--| Author: Michael B. Feldman, The George Washington University 
--| Last Modified: January 1996                                     
------------------------------------------------------------------------

  PROCEDURE MakeEmpty (Q : IN OUT queue) IS
  BEGIN
    Q.Tail := 0;
  END MakeEmpty;

  PROCEDURE Enqueue (Q : IN OUT Queue;
                     E : IN Element) IS
  BEGIN
    IF Q.Tail = Q.Capacity THEN
      RAISE QueueFull;
    ELSE
      Q.Tail           := Q.Tail + 1;
      Q.Store (Q.Tail) := E;
    END IF;
  END Enqueue;

  PROCEDURE Dequeue (Q : IN OUT Queue) IS
  BEGIN
    IF Q.Tail = 0 THEN
      RAISE QueueEmpty;
    ELSE
      Q.Store (1..Q.Tail - 1) := Q.Store (2..Q.Tail); -- slice
      Q.Tail := Q.Tail -1;
    END IF;
  END Dequeue;

  FUNCTION First (Q : IN Queue) RETURN Element IS
  BEGIN
    IF Q.Tail = 0 THEN
      RAISE QueueEmpty;
    ELSE
      RETURN Q.Store (1);
    END IF;
  END First;

  FUNCTION IsEmpty (Q : IN Queue) RETURN Boolean IS
  BEGIN
    RETURN Q.Tail = 0;
  END IsEmpty;

  FUNCTION IsFull (Q : IN Queue) RETURN Boolean IS
  BEGIN
    RETURN Q.Tail = Q.Capacity;
  END IsFull;
  
END Queues_Generic;