#ifndef _BSPTREE_RGBSTACK_HPP_ #define _BSPTREE_RGBSTACK_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_ARRAY_HPP_ #include #endif #ifndef _BSPTREE_TREENODEEX_HPP_ #include #endif #ifndef _BSPTREE_COLORKEY_HPP_ #include #endif class RGBStack { public: RGBStack(void); ~RGBStack(); WORD size(void)const; WORD size(WORD size); void rewind(void); TreeNodeEx ¤tNode(void); TreeNodeEx &popNode(void); void pushNode(const TreeNodeEx &someTreeNodeEx); private: enum{MaxItems=100}; Array mVectoredNodes; short mStackPointer; }; inline RGBStack::RGBStack(void) : mStackPointer(0) { mVectoredNodes.size(MaxItems); } inline RGBStack::~RGBStack() { } inline WORD RGBStack::size(void)const { return mStackPointer; } inline WORD RGBStack::size(WORD size) { mVectoredNodes.size(size); rewind(); return (WORD)mVectoredNodes.size(); } inline void RGBStack::rewind(void) { mStackPointer=0; } inline TreeNodeEx &RGBStack::currentNode(void) { return mVectoredNodes[mStackPointer]; } inline TreeNodeEx &RGBStack::popNode(void) { if(mStackPointer-1<0)return mVectoredNodes[mStackPointer]; return mVectoredNodes.operator[](--mStackPointer); } inline void RGBStack::pushNode(const TreeNodeEx &someNode) { if(mStackPointer>=mVectoredNodes.size())return; mVectoredNodes[mStackPointer++]=someNode; } #endif