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;