#ifndef __STACK_AMV #define __STACK_AMV #include "deque.h" namespace amv { template <class type, class C=deque<type> > class stack { protected: C cnt; public: typedef C::value_type value_type; typedef C::size_type size_type; typedef C container_type; explicit stack(const C &c=C()); bool empty() const; size_type size() const; value_type &top(); const value_type &top() const; void push(const value_type &newObject); void pop(); }; template <class type, class C> inline stack<type,C>::stack(const C &c): cnt(c) { } template <class type, class C> inline bool stack<type,C>::empty() const { return cnt.empty(); } template <class type, class C> inline stack<type,C>::size_type stack<type,C>::size() const { return cnt.size(); } template <class type, class C> inline stack<type,C>::value_type &stack<type,C>::top() { return cnt.back(); } template <class type, class C> inline const stack<type,C>::value_type &stack<type,C>::top() const { return cnt.back(); } template <class type, class C> inline void stack<type,C>::push(const value_type &newObject) { cnt.push_back(newObject); } template <class type, class C> inline void stack<type,C>::pop() { cnt.pop_back(); } } #endif