package body Stacks is function Size( S: Stack ) return Natural is begin return S.Size; end; procedure Empty( S: in out Stack ) is begin S.Size := 0; end; procedure Push( S: in out Stack; I: in Item ) is begin if S.Size < S.Capacity then S.Size := S.Size + 1; S.Data(S.Size) := I; else raise Illegal_Use; end if; end Push; procedure Pop( S: in out Stack ) is begin if S.Size > 0 then S.Size := S.Size - 1; else raise Illegal_Use; end if; end Pop; function Top( S: Stack ) return Item is begin if S.Size > 0 then return S.Data(S.Size); else raise Illegal_Use; end if; end Top; end Stacks;