#pragma once template class CMosisStrg { int m_nSpace; int m_Width, m_Height; T* m_pData; public: CMosisStrg() { m_pData= NULL; m_Width= m_Height= m_nSpace= 0; } ~CMosisStrg() { if(m_pData) delete[] m_pData; } BOOL SetStrgSize(int w, int h) { if(w < 1) w= 1; if(h < 1) h= 1; int size= w*h; if(size <= m_nSpace) { m_Width= w; m_Height= h; return TRUE; } if(m_pData) delete[] m_pData; m_pData= new T[size]; m_nSpace= m_Width= m_Height= 0; if(! m_pData) return FALSE; m_nSpace= size; m_Width= w; m_Height= h; return TRUE; } }; template class CMosisBlock { public: CMosisBlock() { m_pData= NULL; m_nData= m_nSpace= 0; ResetBlock(); } ~CMosisBlock() { if(m_pData) delete[] m_pData; } public: int m_iData; int m_nSpace; int m_nData; T *m_pData; public: BOOL SetBlockSize(int size) { if(size <= 1) size= 1; if(size <= m_nSpace) { m_nData= size; return TRUE; } if(m_pData) delete[] m_pData; m_pData= new T[size]; m_nSpace= m_nData= 0; if(! m_pData) return FALSE; m_nSpace= size; m_nData= size; return TRUE; } void ResetBlock() { m_iData= 0; } T* GetData(int i) {return (m_pData+ i);} T* GetDataAddr() {return m_pData;} int GetDataCount() {return m_iData;} int GetValidDataSpace() {return m_nData;} int GetDataSpace() {return m_nSpace;} int GetDataIndex() {return m_iData;} T* GetNextData() { m_iData++; if(m_iData >= m_nData){ m_iData= m_nData;} return m_pData+ m_iData-1; } T* GetCurDataAuto() {m_iData++; return m_pData+ m_iData-1;} T* GetCurData() {return m_pData+ m_iData;} int AddDataCount() {if(m_iData< m_nData-1) ++m_iData; return m_iData;} void AddBlock(T &data) { if(m_iData < m_nData) { m_pData[m_iData++]= data; } } }; template class CMosisStack { public: CMosisStack() { m_pData= NULL; m_nData= m_nSpace= 0; } ~CMosisStack() { if(m_pData) delete[] m_pData; } protected: int m_nSpace; int m_nData; T *m_pData; public: BOOL SetStackSize(int size) { if(size <= 1) size= 1; if(size <= m_nSpace) { m_nData= size; return TRUE; } if(m_pData) delete[] m_pData; m_pData= new T[size]; m_nSpace= m_nData= 0; if(! m_pData) return FALSE; m_nSpace= size; m_nData= size; return TRUE; } T* GetStackData(int i) {return (m_pData+ i);} T* GetStackDataAddr() {return m_pData;} int GetStackDataCount() {return m_nData;} }; template class CPointerBox { };