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