12.2 Generic Bodies

From OC Systems Wiki!
< Guide:95lrm
Revision as of 23:35, 4 May 2019 by imported>WikiVisor (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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

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.


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


Example of a generic procedure body:

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

Example of a generic function body:

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

Example of a generic package body:

package body On_Vectors is  --  see 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; 
        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 Sum;

    function Sigma(A Vector) return Item is 
        Total : Item := A(A'First); --  the formal type Item 
        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;

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc. Ada Reference Manual