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