generic   -- specification

 

type element is private;

 

package queuesgeneric is

 

-- type definition

 type queue (capacity: positive) is limited private;

 

-- exported exceptions

      QueueFull : exception;

      QueueEmpty : exception;

     

-- constructors

    procedure MakeEmpty (Q : in out queue);

    -- pre: Q is defined

    -- post:  Q is empty

   

    procedure Enqueue (Q: in out  Queue; E : in element);

    -- pre:  Q and E are defined

    -- post:  Q is returned with E as the top element

    -- raises: QueueFull if Q already contains Capacity Elements

   

    procedure dequeue (Q: in out Queue);

    -- pre:  Q is defined

    -- post:  Q is returned with the top Element discarded

    -- raises QueueEmpty if Q contains no elemelnts

   

-- selector

   function first (Q : in Queue) return Element;

   -- pre:  Q is defined

   -- post:  The first element of Q is returned

   -- raises:  QueueEmpty if Q contains no elements

 

-- inquiry operations

   Function isEmpty (Q : in Queue) return Boolean;

   -- pre:  Q is defined

   -- post:  returns True if Q is empty, False otherwise

 

   Function isFull (Q:  in Queue) return boolean;

   -- pre:  Q is defined

   -- post:  returns True if Q is full, False otherwise

 

Private

    Type List is Array (positive Range <> ) of element;

    Type Queue (Capacity : positive) is record

                tail : natural := 0;

                store : List (1..Capacity);

    End record;      

End QueuesGeneric;