File : queue_pack_protected.ads


Package Queue_Pack_Protected is

   QueueSize : constant Integer := 10;
   subtype Element is Character;
   type Queue_Type is limited private;

   Protected type Protected_Queue is

      entry Enqueue (Item: in  Element);
      entry Dequeue (Item: out Element);

   private
      Queue : Queue_Type;

   end Protected_Queue;

private
   type Marker is mod QueueSize;
   type List is array (Marker'Range) of Element;
   type Queue_State is (Empty, Filled);
   type Queue_Type is record
      Top, Free : Marker      := Marker'First;
      State     : Queue_State := Empty;
      Elements  : List;
   end record;
end Queue_Pack_Protected;