generic
type Element is private;
package Queues_Generic is
------------------------------------------------------------------------
--| Specification for Generic FIFO Queues Package
--| Author: Michael B. Feldman, The George Washington University
--| Last Modified: January 1996
------------------------------------------------------------------------
-- 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 Elements
-- 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 Queues_Generic;