Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/****************************************************************************\
* * ARRAY.H ---Class declaration for the array structure * \****************************************************************************/
#ifndef _ARRAY_H
#define _ARRAY_H
/*Interface-------------------------------------------------------------------*/ template <class T> class array { private: int nLen, nMax; T *pData; void Destruct(); public: array(); ~array();
BOOL Append(T v); int Length() const; void ClearAll(); void DeleteAll();
T& operator[](int index); };
/*definitions of everything*/
#ifndef ARRAY_CXX
#define ARRAY_CXX
/*Implementation------------------------------------------------------------*/ template <class T> array<T>::array(){ nLen = nMax = 0; pData = NULL; }
template <class T> inline array<T>::~array() { if (pData) ::MemFree(pData); pData = NULL; nMax = nLen = 0; }
template <class T> inline int array<T>::Length() const{ return nLen; }
template <class T> inline T& array<T>::operator[](int index){ ASSERT(index<Length()); ASSERT(index>=0); ASSERT(pData); return pData[index]; }
template <class T> BOOL array<T>::Append(T v) { if (nLen == nMax){ nMax = nMax + 8; /* grow by bigger chunks */ T* pNew = (T*)::MemReAlloc(pData, sizeof(T)*nMax); if (pNew == NULL) return FALSE; pData = pNew; } ASSERT(pData); ASSERT(nMax); pData[nLen++] = v; return TRUE; }
template <class T> void array<T>::Destruct(){ while (nLen){ delete pData[--nLen]; } }
template <class T> inline void array<T>::ClearAll() { nLen = 0; }
template <class T> inline void array<T>::DeleteAll() { Destruct(); }
#endif
/* ARRAY_CXX */
#endif
/* _ARRAY_H */
|