stack.h

Go to the documentation of this file.
00001 /**********************************************************************
00002  *<
00003     FILE: stack.h
00004 
00005     DESCRIPTION: Simple stack using Tab.
00006 
00007     CREATED BY: Rolf Berteig
00008 
00009     HISTORY: Created 22 November 1994
00010 
00011  *> Copyright (c) 1994, All Rights Reserved.
00012  **********************************************************************/
00013 
00014 #pragma once
00015 #include "maxheap.h"
00016 #include "tab.h"
00017 
00019 template<class T> class Stack : public MaxHeapOperators
00020 {
00021     private:
00022         Tab<T> s;       
00023     
00024     public:     
00025         // access the stack indexing from the top down.
00026         const T& operator[](const int i) const { 
00027             DbgAssert(s.Count()-i>0);
00028             return s[s.Count()-i-1];
00029             }
00030         T& operator[](const int i) { 
00031             DbgAssert(s.Count()-i>0);
00032             return s[s.Count()-i-1];
00033         }
00034 
00039         void Push( T *el ) { 
00040             s.Append( 1, el );          
00041             }
00042 
00047         void Pop( T *el ) { 
00048             DbgAssert( s.Count() ); 
00049             *el = s[s.Count()-1];
00050             s.Delete( s.Count()-1, 1 );         
00051             }
00052 
00055         void Pop() { 
00056             DbgAssert( s.Count() );             
00057             s.Delete( s.Count()-1, 1 );         
00058             }
00059 
00065         void GetTop( T *el ) {
00066             DbgAssert( s.Count() ); 
00067             *el = s[s.Count()-1];
00068             }
00069 
00071         void Clear() {
00072             s.Delete(0,s.Count());          
00073             }
00074 
00076         int Count() const {
00077             return s.Count(); 
00078             }
00079 
00085         int Remove( int i ) {
00086             assert(i<s.Count());
00087             return s.Delete(s.Count()-1-i,1);
00088             }
00089     };
00090 
00091