Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

65 lines
1.3 KiB

#include "stdafx.h"
#pragma hdrstop
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CDrg::CDrg(int cbDataElement, int cInit, int cAddElements)
{
ASSERT(cInit > 0);
this->cbDataElement = cbDataElement;
this->cAddElements = cAddElements;
cMaxElements = cInit;
endpos = 0;
pvData = lcCalloc(cInit * cbDataElement);
}
void* STDCALL CDrg::GetPtr(int pos)
{
if (pos >= cMaxElements) {
cMaxElements = pos + cAddElements;
ASSERT(cMaxElements * cbDataElement < UINT_MAX);
#ifdef _DEBUG
PBYTE pbOld = (PBYTE) pvData;
#endif
pvData = lcReAlloc(pvData, cMaxElements * cbDataElement);
// zero-out the new memory
#ifdef _DEBUG
PBYTE pbNew = (PBYTE) pvData + pos * cbDataElement;
#endif
ASSERT(*((PBYTE) pvData + (pos * cbDataElement)) == 0);
// memset((PBYTE) pvData + (pos * cbDataElement), 0,
// cAddElements * cbDataElement);
}
if (pos >= endpos)
endpos = pos + 1; // note that this can leave holes
return (PBYTE) pvData + pos * cbDataElement;
}
void STDCALL CDrg::Remove(int pos)
{
ASSERT(pos < endpos);
memcpy((PBYTE) pvData + pos * cbDataElement,
(PBYTE) pvData + (pos + 1) * cbDataElement,
(endpos - (pos + 1)) * cbDataElement);
endpos--;
}
void STDCALL CDrg::RemoveFirst(void)
{
ASSERT(endpos);
endpos--;
memcpy(pvData, (PBYTE) pvData + cbDataElement,
endpos * cbDataElement);
}