Leaked source code of windows server 2003
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.
|
|
//
// StrArray.cpp
//
// A very simple string array implementation, intended to be small
// rather than scalable or particularly fast.
//
// History:
//
// 10/05/1999 KenSh Created
//
#include "stdafx.h"
#include "StrArray.h"
#include "Util.h"
CStringArray::CStringArray() { m_prgpStrings = NULL; m_prgItemData = NULL; m_cStrings = 0; }
CStringArray::~CStringArray() { RemoveAll(); }
void CStringArray::RemoveAll() { for (int i = 0; i < m_cStrings; i++) free(m_prgpStrings[i]); free(m_prgpStrings); free(m_prgItemData); m_prgpStrings = NULL; m_prgItemData = NULL; m_cStrings = 0; }
int CStringArray::Add(LPCTSTR pszNewElement) { LPTSTR* ppsz = (LPTSTR*)realloc(m_prgpStrings, (1+m_cStrings) * sizeof(LPTSTR)); DWORD* pdw = (DWORD*)realloc(m_prgItemData, (1+m_cStrings) * sizeof(DWORD));
// update whatever was successfully reallocated
if (ppsz) m_prgpStrings = ppsz; if (pdw) m_prgItemData = pdw;
// if both allocated, we have room.
if (ppsz && pdw) { int nIndex = m_cStrings++; m_prgpStrings[nIndex] = lstrdup(pszNewElement); m_prgItemData[nIndex] = 0; return nIndex; } return -1; }
void CStringArray::RemoveAt(int nIndex) { ASSERT(nIndex >= 0 && nIndex < m_cStrings);
free(m_prgpStrings[nIndex]); m_cStrings--;
for ( ; nIndex < m_cStrings; nIndex++) { m_prgpStrings[nIndex] = m_prgpStrings[nIndex+1]; m_prgItemData[nIndex] = m_prgItemData[nIndex+1]; } }
|