package
body QueuesGeneric is
procedure makeEmpty (Q : in out queue ) is
begin
Q.tail := 0;
end makeEmpty;
procedure Enqueue (Q : in out Queue; E : in Element) is
begin
if Q.tail = q.capacity then
raise QueueFull;
else
Q.tail := q.tail + 1;
Q.store (Q.tail) := E;
end if;
end Enqueue;
procedure Dequeue (Q : in out Queue) is
begin
if q.tail = 0 then
raise QueueEmpty;
else
Q.store(1..Q.tail-1) := Q.store
(2..Q.tail); -- slice
Q.tail := Q.tail - 1;
end if;
end Dequeue;
function first (Q : in Queue) return
Element is
begin
if q.tail = 0 then
raise QueueEmpty;
else
return Q.Store(1);
end if;
end first;
function isEmpty (Q: in Queue) return
boolean is
begin
return Q.tail = 0;
end IsEmpty;
function isFull (Q : in Queue) return
Boolean is
begin
return Q.tail = Q.capacity;
end isFull;
end QueuesGeneric;