Go to the first, previous, next, last section, table of contents.


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.

    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 section 10.1.1 Compilation Units - Library Units, 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 section 12.1 Generic Declarations
       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 section 12.1 Generic Declarations
    begin
       return X*X;  --  the formal operator "*"
    end Squaring;
    
  8. Example of a generic package body:
  9. package body On_Vectors is  --  See section 12.1 Generic Declarations
    
  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;
    


Go to the first, previous, next, last section, table of contents.