#include TStack::TStack(int size) : _data(size), _sp(0) { } TStack::TStack(const TStack& stack) : _data(stack._data), _sp(0) { } void TStack::push(const TObject& o) { _data.add(o, _sp++); } void TStack::push(TObject* o) { _data.add(o, _sp++); } TObject& TStack::pop() { CHECK(_sp > 0, "Stack underflow!"); return _data[--_sp]; } TObject& TStack::peek(int depth) const { CHECKD(depth >= 0 && depth < _sp, "Stack depth error: ", depth); return _data[_sp-depth-1]; } void TStack::destroy() { _data.destroy(); _sp = 0; } bool TStack::destroy_base() { if (_sp > 0) _sp--; return _data.destroy(0, TRUE); }