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.