File : queue_pack_protected.adb


package body Queue_Pack_Protected is

   protected body Protected_Queue is

      entry Enqueue (Item: in Element) when
        Queue.State = Empty or Queue.Top /= Queue.Free is
      begin
         Queue.Elements (Queue.Free) := Item;
         Queue.Free  := Queue.Free - 1;
         Queue.State := Filled;
      end Enqueue;

      entry Dequeue (Item: out Element) when
        Queue.State = Filled is
      begin
         Item      := Queue.Elements (Queue.Top);
         Queue.Top := Queue.Top - 1;
         if Queue.Top = Queue.Free then Queue.State := Empty; end if;
      end Dequeue;

   end Protected_Queue;
end Queue_Pack_Protected;