home *** CD-ROM | disk | FTP | other *** search
- // **************************************************************
- // tstack.h
- // Example program for Simple C++
- //
- // (c) 2000 Emmenjay Consulting Pty Ltd
- //
- // History
- // 12/02/2000 MJS Initial Coding.
- //
- // **************************************************************
-
- template <class T>
- class TStack {
- public:
- TStack( int size=1000 );
- ~TStack( void );
- bool Push( T &val );
- bool Pop( T &val );
- private:
- T *buff;
- int count;
- int buffsize;
- bool Expand( int size );
- };
-
- template <class T>
- TStack<T>::TStack( int size )
- {
- count = buffsize = 0;
- buff = 0;
- Expand( size );
- }
-
- template <class T>
- TStack<T>::~TStack( void )
- {
- delete [] buff;
- }
-
- template <class T>
- bool TStack<T>::Push( T& val )
- {
- if (count==buffsize)
- if (!Expand(2*buffsize))
- return false;
- buff[count++] = val;
- return true;
- }
-
- template <class T>
- bool TStack<T>::Pop( T &val )
- {
- if (count) {
- val = buff[--count];
- return true;
- } else {
- return false;
- }
- }
-
- template <class T>
- bool TStack<T>::Expand(int size)
- {
- int i;
- T *tmp = (T *)new T [size];
- if (!tmp)
- return false;
- if (count>size)
- count = size;
- if (buff) {
- for (i=0; i<count; i++)
- tmp[i] = buff[i];
- delete [] buff;
- }
- buff = tmp;
- buffsize = size;
- return true;
- }
-
-
-