#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;
}