#ifndef _LVPSTACK_H_ #define _LVPSTACK_H_ #include "cvclibdef.h" #include "vector.h" #define SDEFAULT_SIZE 10 // default initial stack size template class stack { public: // constructors/destructor stackstack( ) : myTop(-1), myElements(SDEFAULT_SIZE) { } stack(const stack & s) : myTop(s.myTop), myElements(s.myElements) { } ~stack( ) { } // assignment const stack & operator = (const stack & rhs) { if (this != &rhs) { myTop = rhs.myTop; myElements = rhs.myElements; } return *this; } // accessors const itemType & top() const { if (isEmpty()) { cerr << "error, popping an empty stack" << endl; exit(1); } return myElements[myTop]; } bool isEmpty() const { return myTop == -1; } int length() const { return myTop+1; } // modifiers void push(const itemType & item) { if( myTop + 1 >= myElements.length() ) // grow vector if necessary { myElements.resize(myElements.length() * 2); } myTop++; // new top most element myElements[myTop ] = item; } void pop() { if (isEmpty()) { cerr << "error, popping an empty stack" << endl; exit(1); } myTop--; } void pop(itemType & item) { if (isEmpty()) { cerr << "error, popping an empty stack" << endl; exit(1); } item = myElements[myTop]; myTop--; } void makeEmpty() { yTop = -1; } private: int myTop; // index of top element vector myElements; // storage for stack }; #endif