#pragma once
// 给1维数组指针开辟空间或销毁释放空间
template<typename T>
inline BOOL ReSize1dDataPointer(T * &pImage1Data, int i1D)
{
BOOL bResult = FALSE;
if (i1D == 0) // 当 = 0 时代表删除一个数组
{
// 删除之前内存
if (pImage1Data != NULL)
{
__try
{
delete [] pImage1Data;
pImage1Data = NULL;
}
__except(EXCEPTION_EXECUTE_HANDLER){;}
}
}
else if (i1D > 0) // 如果还大于0,代表重新分配
{
__try
{
pImage1Data = new T[i1D];
#ifdef _DEBUG
memset(pImage1Data, 65, sizeof(T)*i1D); // 'A'
#endif
bResult = TRUE;
}
__except(EXCEPTION_EXECUTE_HANDLER) {
pImage1Data = NULL;
bResult = FALSE;
}
}
return bResult;
}
// 给2维数组指针开辟空间或销毁释放空间
template<typename T>
inline BOOL ReSize2dDataPointer(T ** &pImage2Data,int iOld1D,int i1D,int i2D)
{
BOOL bResult = FALSE;
if ( iOld1D >= 0 )
{
__try
{
ReSize1dDataPointer(pImage2Data[0],0);
}
__except(EXCEPTION_EXECUTE_HANDLER){;}
ReSize1dDataPointer(pImage2Data,0);
if ( i1D > 0 && i2D > 0
&& ReSize1dDataPointer(pImage2Data,i1D) )
{
T * pData = NULL;
if ( ReSize1dDataPointer(pData,i1D*i2D) )
{
for ( int i = 0; i < i1D; ++i )
{
pImage2Data[i] = pData;
pData += i2D;
}
bResult = TRUE;
}
else ReSize1dDataPointer(pImage2Data,0); // 开辟1维失败时释放空间
}
}
return bResult;
}
// 给3维数组指针开辟空间或销毁释放空间
template<typename T>
inline BOOL ReSize3dDataPointer(T *** &pImage3Data,int i1D,int i2D,int i3D)
{
BOOL bResult = FALSE;
__try
{
ReSize1dDataPointer(pImage3Data[0][0],0);
}
__except(EXCEPTION_EXECUTE_HANDLER){;}
ReSize2dDataPointer(pImage3Data,0,0,0);
if ( i1D > 0 && i2D > 0 && i3D > 0
&& ReSize2dDataPointer(pImage3Data,0,i1D,i2D) )
{
T * pData = NULL;
if ( ReSize1dDataPointer(pData,i1D*i2D*i3D) )
{
for ( int i = 0; i < i1D; ++i )
{
for ( int j = 0; j < i2D; ++j )
{
pImage3Data[i][j] = pData;
pData += i3D;
}
}
bResult = TRUE;
}
else ReSize2dDataPointer(pImage3Data,0,0,0); // 开辟2维失败时释放空间
}
return bResult;
}