template <typename Object>
class DequeStack {
private: // member data
LinkedDeque<Object> D; // the deque
public:
DequeStack() : D() { } // default constructor
int size() const { return D.size(); } // number of elements in stack
bool isEmpty() const { return D.isEmpty(); } // is the stack empty?
// return the top of the stack
const Object& top() const throw(StackEmptyException) {
try {
return D.first();
} catch (const DequeEmptyException& e) {
throw StackEmptyException("Top of empty stack");
}
}
void push(const Object& elem) // push onto stack
{ D.insertFirst(elem); }
Object pop() throw(StackEmptyException) { // pop the stack
try {
Object result = D.first();
D.removeFirst();
return result;
} catch (const DequeEmptyException& e) {
throw StackEmptyException("Pop of empty stack");
}
}
};