![[PREVIOUS]](lrm-prev.gif)
![[UP]](lrm-up.gif)
![[NEXT]](lrm-next.gif)
The body of a generic subprogram or generic package is a template for the bodies of the corresponding subprograms or packages obtained by generic instantiations. The syntax of a generic body is identical to that of a nongeneric body.
For each declaration of a generic subprogram, there must be a corresponding body.
The elaboration of a generic body has no other effect than to establish that the body can from then on be used as the template for obtaining the corresponding instances.
Example of a generic procedure body:
procedure EXCHANGE(U, V : in out ELEM) is -- see example in 12.1
T : ELEM; -- the generic formal type
begin
T := U;
U := V;
V := T;
end EXCHANGE;
Example of a generic function body:
function SQUARING(X : ITEM) return ITEM is -- see example in 12.1
begin
return X*X; -- the formal operator "*"
end;
Example of a generic package body:
package body ON_VECTORS is -- see example in 12.1
function SUM(A, B : VECTOR) return VECTOR is
RESULT : VECTOR(A'RANGE); -- the formal type VECTOR
BIAS : constant INTEGER := B'FIRST - A'FIRST;
begin
if A'LENGTH /= B'LENGTH then
raise LENGTH_ERROR;
end if;
for N in A'RANGE loop
RESULT(N) := SUM(A(N), B(N + BIAS)); -- the formal function SUM
end loop;
return RESULT;
end;
function SIGMA(A : VECTOR) return ITEM is
TOTAL : ITEM := A(A'FIRST); -- the formal type ITEM
begin
for N in A'FIRST + 1 .. A'LAST loop
TOTAL := SUM(TOTAL, A(N)); -- the formal function SUM
end loop;
return TOTAL;
end;
end;
References: body, elaboration, generic body, generic instantiation, generic package, generic subprogram, instance, package body, package, subprogram, subprogram body.
![[INDEX]](lrm-idx.gif)
![[CONTENTS]](lrm-toc.gif)