1. -- 
  2. -- Uwe R. Zimmer, Australia, 2013 
  3. -- 
  4.  
  5. package Queue_Pack_Exceptions is 
  6.  
  7.    Queue_Size : constant Positive := 10; 
  8.    type Element is (Up, Down, Spin, Turn); 
  9.    type Marker is mod Queue_Size; 
  10.    type List is array (Marker) of Element; 
  11.    type Queue_Type is record 
  12.       Top, Free : Marker  := Marker'First; 
  13.       Is_Empty  : Boolean := True; 
  14.       Elements  : List; 
  15.    end record; 
  16.  
  17.    procedure Enqueue (Item :     Element; Queue : in out Queue_Type); 
  18.    procedure Dequeue (Item : out Element; Queue : in out Queue_Type); 
  19.  
  20.    function Is_Empty (Queue : Queue_Type) return Boolean is 
  21.      (Queue.Is_Empty); 
  22.  
  23.    function Is_Full (Queue : Queue_Type) return Boolean is 
  24.      (not Queue.Is_Empty and then Queue.Top = Queue.Free); 
  25.  
  26.    Queue_overflow, Queue_underflow : exception; 
  27.  
  28. end Queue_Pack_Exceptions;