#include <cassert> inline PilhaInt::PilhaInt() : capacidade(capacidade_inicial), itens(new Item[capacidade]), numero_de_itens(0) { assert(cumpreInvariante()); } inline PilhaInt::~PilhaInt() { assert(cumpreInvariante()); delete[] itens; } inline int PilhaInt::altura() const { assert(cumpreInvariante()); return numero_de_itens; } inline bool PilhaInt::estaVazia() const { assert(cumpreInvariante()); return altura() == 0; } inline bool PilhaInt::estaCheia() const { assert(cumpreInvariante()); return altura() == capacidade; } inline PilhaInt::Item const& PilhaInt::topo() const { assert(cumpreInvariante()); assert(not estaVazia()); return itens[numero_de_itens - 1]; } inline PilhaInt::Item& PilhaInt::topo() { assert(cumpreInvariante()); assert(not estaVazia()); return itens[numero_de_itens - 1]; } inline void PilhaInt::tira() { assert(cumpreInvariante()); assert(not estaVazia()); --numero_de_itens; assert(cumpreInvariante()); } inline bool PilhaInt::cumpreInvariante() const { return 0 <= numero_de_itens and numero_de_itens <= capacidade and 0 < capacidade; } inline PilhaInt::MemoriaEsgotada::MemoriaEsgotada(int dimensao_pretentida) : dimensao_pretendida(dimensao_pretendida) { } int PilhaInt::MemoriaEsgotada::dimensaoPretendida() { return dimensao_pretendida; }