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