Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

Stack.hh

Go to the documentation of this file.
00001 // Stack.h
00002 #include <cassert>
00003 #include <cstddef>
00004 #include <stdexcept>
00005 #include <string>
00006 #include <new>
00007 
00008 class StackError : public logic_error
00009 {
00010 public:
00011     StackError(const string& s)
00012         : logic_error(s)
00013     {}
00014 };
00015 
00016 template<typename T>
00017 class Stack
00018 {
00019 public:
00020     Stack(size_t) throw(StackError, bad_alloc);
00021     ~Stack();
00022 
00023     void push(const T&) throw(StackError);
00024     T pop() throw(StackError);
00025     T top() const throw(StackError);
00026     size_t size() const;
00027 
00028 private:
00029     T* data;
00030     size_t max;
00031     size_t ptr;
00032 };
00033 
00034 template<typename T>
00035 inline Stack<T>::~Stack()
00036 {
00037     delete [] data;
00038     max = ptr = 0;
00039 }
00040 
00041 template<typename T>
00042 inline size_t Stack<T>::size() const
00043 {
00044     return ptr;
00045 }
00046 
00047 template<typename T>
00048 Stack<T>::Stack(size_t siz) throw(StackError, bad_alloc)
00049 {
00050     if (siz == 0)
00051         throw StackError("bad size in Stack(size_t)");
00052     data = new T[siz];
00053     max = siz;
00054     ptr = 0;
00055 }
00056 
00057 template<typename T>
00058 void Stack<T>::push(const T& x) throw(StackError)
00059 {
00060     if (ptr == max)
00061         throw StackError("stack overflow");
00062 
00063     assert(ptr < max);
00064     data[ptr++] = x;
00065 }
00066 
00067 template<typename T>
00068 T Stack<T>::pop() throw(StackError)
00069 {
00070     if (ptr == 0)
00071         throw StackError("stack underflow");
00072     return data[--ptr];
00073 }
00074 
00075 template<typename T>
00076 T Stack<T>::top() const throw(StackError)
00077 {
00078     if (ptr == 0)
00079         throw StackError("stack underflow");
00080     return data[ptr - 1];
00081 }
00082 

Generated on Tue Apr 2 15:33:22 2002 for libccunit by doxygen 1.2.14 written by Dimitri van Heesch, © 1997-2002

Project hosted on sourceforge SourceForge Logo