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.
120 lines
2.3 KiB
120 lines
2.3 KiB
// RegStringArray.cpp: implementation of the CRegStringBuffer class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "RegStringBuffer.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CRegStringBuffer::CRegStringBuffer(int arraySize, int elementSize)
|
|
: m_arraySize(arraySize), m_elementSize(elementSize), m_cellsUsed(0)
|
|
{
|
|
m_Array = new TCHAR*[arraySize];
|
|
|
|
if (m_Array == NULL)
|
|
{
|
|
LOG0(LOG_ERROR, "Couldn't allocate CRegStringBuffer");
|
|
}
|
|
else
|
|
{
|
|
for (int i=0; i<arraySize; i++)
|
|
{
|
|
m_Array[i] = new TCHAR[elementSize];
|
|
|
|
if (m_Array[i] == NULL)
|
|
{
|
|
LOG0(LOG_ERROR, "Couldn't allocate CRegStringBuffer");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
CRegStringBuffer::~CRegStringBuffer()
|
|
{
|
|
for (int i=0; i<m_arraySize; i++)
|
|
{
|
|
delete[] m_Array[i];
|
|
}
|
|
|
|
delete[] m_Array;
|
|
}
|
|
|
|
|
|
int mMax(int a, int b)
|
|
{
|
|
if (a > b)
|
|
return a;
|
|
else
|
|
return b;
|
|
}
|
|
|
|
|
|
TCHAR** CRegStringBuffer::Access(int NumElements, int ElementSize)
|
|
{
|
|
if ((NumElements > m_arraySize)
|
|
|| (ElementSize > m_elementSize))
|
|
{
|
|
//delete the data structure
|
|
for (int i=0; i<m_arraySize; i++)
|
|
{
|
|
delete[] m_Array[i];
|
|
}
|
|
|
|
delete[] m_Array;
|
|
|
|
//assign new larger dimensions
|
|
m_arraySize = mMax(m_arraySize, NumElements);
|
|
m_elementSize = mMax(m_elementSize, ElementSize);
|
|
|
|
//reallocate the array
|
|
/*m_Array = new TCHAR*[m_arraySize];
|
|
|
|
for (int i=0; i<m_arraySize; i++)
|
|
{
|
|
m_Array[i] = new TCHAR[m_elementSize];
|
|
}*/
|
|
|
|
m_Array = new TCHAR*[m_arraySize];
|
|
|
|
if (m_Array == NULL)
|
|
{
|
|
LOG0(LOG_ERROR, "Couldn't allocate CRegStringBuffer");
|
|
}
|
|
else
|
|
{
|
|
for (int i=0; i<m_arraySize; i++)
|
|
{
|
|
m_Array[i] = new TCHAR[m_elementSize];
|
|
|
|
if (m_Array[i] == NULL)
|
|
{
|
|
LOG0(LOG_ERROR, "Couldn't allocate CRegStringBuffer");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return m_Array;
|
|
}
|
|
|
|
|
|
|
|
int __cdecl compare( const void *arg1, const void *arg2 )
|
|
{
|
|
/* Compare all of both strings: */
|
|
return _tcscmp( * ( TCHAR** ) arg1, * ( TCHAR** ) arg2 );
|
|
}
|
|
|
|
void CRegStringBuffer::Sort(int NumElements)
|
|
{
|
|
qsort( (void *)m_Array, NumElements, sizeof(TCHAR*), compare );
|
|
}
|
|
|
|
|