[Home] [Prev] [Next] [Index]

12.2 Generic Bodies

12.2 Generic Bodies

1
The body of a generic unit (a generic body) [is a template for the instance bodies. The syntax of a generic body is identical to that of a nongeneric body].

1.a
Ramification: We also use terms like "generic function body" and "nongeneric package body."

Dynamic Semantics

2
The elaboration of a generic body has no other effect than to establish that the generic unit can from then on be instantiated without failing the Elaboration_Check. If the generic body is a child of a generic package, then its elaboration establishes that each corresponding declaration nested in an instance of the parent (see 10.1.1) can from then on be instantiated without failing the Elaboration_Check.

NOTES

3 4
The syntax of generic subprograms implies that a generic subprogram body is always the completion of a declaration.

Examples

4
Example of a generic procedure body:

5
procedure Exchange(U, V : in out Elem) is  --see 12.1
   T : Elem;  --the generic formal type
begin
   T := U;
   U := V;
   V := T;
end Exchange;

6
Example of a generic function body:

7
function Squaring(X : Item) return Item is  --see 12.1
begin
   return X*X;  --the formal operator "*"
end Squaring;

8
Example of a generic package body:

9
package body On_Vectors is  --see 12.1

10
   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;

11
      for N in A'Range loop
         Result(N) := Sum(A(N), B(N + Bias)); --the formal function Sum
      end loop;
      return Result;
   end Sum;

12
   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 Sigma;
end On_Vectors;



[Home] [Prev] [Next] [Index]

documentation@rational.com
Copyright © 1993-1998, Rational Software Corporation.   All rights reserved.