package body Id_Dispenser is
protected Dispenser is
procedure Draw_Id (Id : out Element);
private
Max_Id : Element := Element'First;
end Dispenser;
protected body Dispenser is
procedure Draw_Id (Id : out Element) is
begin
Id := Max_Id;
Max_Id := Element'Succ (Max_Id);
end Draw_Id;
end Dispenser;
function Draw_Id return Element is
Unique_Id : Element := Element'Invalid_Value;
begin
Dispenser.Draw_Id (Id => Unique_Id);
return Unique_Id;
end Draw_Id;
end Id_Dispenser;