35 lines
712 B
Ada
35 lines
712 B
Ada
package body Iterate_Subsets is
|
|
|
|
function First return Subset is
|
|
S: Subset;
|
|
begin
|
|
for I in S'Range loop
|
|
S(I) := I;
|
|
end loop;
|
|
return S;
|
|
end First;
|
|
|
|
procedure Next(S: in out Subset) is
|
|
I: Natural := S'Last;
|
|
begin
|
|
if S(I) < Index'Last then
|
|
S(I) := S(I) + 1;
|
|
else
|
|
while S(I-1)+1 = S(I) loop
|
|
I := I - 1;
|
|
end loop;
|
|
S(I-1) := S(I-1) + 1;
|
|
for J in I .. S'Last loop
|
|
S(J) := S(J-1) + 1;
|
|
end loop;
|
|
end if;
|
|
return;
|
|
end Next;
|
|
|
|
function Last(S: Subset) return Boolean is
|
|
begin
|
|
return S(S'First) = Index'Last-S'Length+1;
|
|
end Last;
|
|
|
|
end Iterate_Subsets;
|