base_stack.hh

Go to the documentation of this file.
00001 /*
00031  * LEGAL:   COPYRIGHT (C) 2007 JIM E. BROOKS
00032  *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
00033  *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
00034  *****************************************************************************/
00035 
00036 #ifndef BASE_STACK_HH
00037 #define BASE_STACK_HH 1
00038 
00039 #include "base.hh"
00040 
00041 namespace base {
00042 
00046 template<typename T>
00047 class Stack
00048 {
00049 
00050 public:
00051 
00053     Stack( const uint preallocate = 32 )
00054     {
00055       //mDeque.reserve( preallocate );  // deque lacks reserve()
00056         SET_TYPESIG(this,TYPESIG_STACK);
00057     }
00058 
00059     ~Stack()
00060     {
00061         INVALIDATE_TYPESIG(this,TYPESIG_STACK);
00062     }
00063 
00064     void Push( T obj )
00065     {
00066     CHECK_TYPESIG(this,TYPESIG_STACK);
00067 
00068         mDeque.push_back( obj );
00069     }
00070 
00072     T Pop( void )
00073     {
00074     CHECK_TYPESIG(this,TYPESIG_STACK);
00075     ASSERT( not mDeque.empty() );
00076 
00077         // back() returns but doesn't remove last item.
00078         // pop_back() returns but doesn't return last item.
00079         T top = mDeque.back();
00080         mDeque.pop_back();
00081         return top;
00082     }
00083 
00084     bool IfEmpty( void ) const
00085     {
00086     CHECK_TYPESIG(this,TYPESIG_STACK);
00087 
00088         return mDeque.empty();
00089     }
00090 
00092     uint Cnt( void ) const
00093     {
00094     CHECK_TYPESIG(this,TYPESIG_STACK);
00095 
00096         return mDeque.size();
00097     }
00098 
00100     uint size( void ) const { return Cnt(); }
00101 
00103     bool empty( void ) const { return IfEmpty(); }
00104 
00105 private:
00106     deque<T>    mDeque;
00107 public:
00108     
00109 };
00110 
00111 } // namespace base
00112 
00113 #endif // BASE_STACK_HH
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:07 2007