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;