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;