1. -- 
  2. -- Uwe R. Zimmer, Australia, 2013 
  3. -- 
  4.  
  5. package body Queue_Pack_Private is 
  6.  
  7.    procedure Enqueue (Item : Element; Queue : in out Queue_Type) is 
  8.  
  9.    begin 
  10.       if Is_Full (Queue) then 
  11.          raise Queue_overflow; 
  12.       end if; 
  13.  
  14.       Queue.Elements (Queue.Free) := Item; 
  15.       Queue.Free     := Queue.Free + 1; 
  16.       Queue.Is_Empty := False; 
  17.    end Enqueue; 
  18.  
  19.    procedure Dequeue (Item : out Element; Queue : in out Queue_Type) is 
  20.  
  21.    begin 
  22.       if Is_Empty (Queue) then 
  23.          raise Queue_underflow; 
  24.       end if; 
  25.  
  26.       Item           := Queue.Elements (Queue.Top); 
  27.       Queue.Top      := Queue.Top + 1; 
  28.       Queue.Is_Empty := Queue.Top = Queue.Free; 
  29.    end Dequeue; 
  30.  
  31.    function Is_Empty (Queue : Queue_Type) return Boolean is 
  32.      (Queue.Is_Empty); 
  33.  
  34.    function Is_Full (Queue : Queue_Type) return Boolean is 
  35.      (not Queue.Is_Empty and then Queue.Top = Queue.Free); 
  36.  
  37. end Queue_Pack_Private;