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