//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: stlutil.h // //-------------------------------------------------------------------------- #ifndef _STLUTIL_H__ #define _STLUTIL_H__ #if defined (DBG) #define _DUMP #endif ///////////////////////////////////////////////////////////////////////// // STL based helper template functions template void _Clear(CNT* pCnt, BOOL bDel) { if (bDel) { CNT::iterator i; for (i = pCnt->begin(); i != pCnt->end(); ++i) { if (*i != NULL) { delete (*i); *i = NULL; } } } pCnt->clear(); } template BOOL _Remove(CNT* pCnt, T* p, BOOL bDel = TRUE) { CNT::iterator i; i = find(pCnt->begin(), pCnt->end(), p); if (i == pCnt->end()) { return FALSE; } pCnt->erase(i); if (bDel) delete p; return TRUE; } /////////////////////////////////////////////////////////////////////// // CCompare<> template class CCompare { public: bool operator()(const T x, const T y) { return *x < *y; } }; /////////////////////////////////////////////////////////////////////// // CPtrList<> template class CPtrList : public list { public: CPtrList(BOOL bOwnMem) { m_bOwnMem = bOwnMem; } ~CPtrList() { Clear(); } #ifdef _DUMP void Dump() { CPtrList::iterator i; for (i = this->begin(); i != this->end(); ++i) { (*i)->Dump(); } } #endif // _DUMP void Clear() { _Clear(this, m_bOwnMem);} BOOL Remove(T p) { return _Remove(this, p, m_bOwnMem);} private: BOOL m_bOwnMem; }; /////////////////////////////////////////////////////////////////////// // CGrowableArr<> template > class CGrowableArr { public: CGrowableArr(BOOL bOwnMem = TRUE) { m_bOwnMem = bOwnMem; }; virtual ~CGrowableArr() { Clear(); } size_t GetCount() { return m_pEntries.size(); } BOOL Alloc(long n) { return TRUE; } void Clear() { _Clear(&m_pEntries, m_bOwnMem); } T* operator[](long i) { return m_pEntries[i]; } BOOL Add(T* p) { m_pEntries.push_back(p); return TRUE; } void Sort() { sort(m_pEntries.begin(), m_pEntries.end(), CMP()); } #ifdef _DUMP void Dump() { vector::iterator i; for (i = m_pEntries.begin(); i != m_pEntries.end(); ++i) { (*i)->Dump(); } } #endif // _DUMP private: BOOL m_bOwnMem; vector m_pEntries; }; #endif // _STLUTIL_H__