-- This is the generic implementation for a stack abstract data type.

package body StackPkg is

    function IsEmpty (S : Stack) return Boolean is
    begin
        return S.Top = 0;
    end IsEmpty;

    ...

    procedure Push (Item : ItemType; S : in out Stack) is
    begin
        if IsFull (S) then
            raise Stack_Full;
        else
            S.Top := S.Top + 1;
            S.Elements(S.Top) := Item;
        end if;
    end Push;

    ...

end StackPkg;