// Set the size of each array dimension
bool resize(const unsigned int (&Dimensions)[N],
const T & Init=T(),
bool PreserveElems=false)
{
Array<T,N> Temp;
// Calculate all the information you need to use the array
Temp.m_nArrayElements=1;
for (int i=0; i<N; i++)
{
if (Dimensions[i]==0)
return false; // Check that no dimension was zero
Temp.m_nArrayElements*=Dimensions[i];
Temp.m_NDimensions[i]=Dimensions[i];
Temp.m_SubArrayLen[i]=1;
for (int k=N-1; k>i; k--)
Temp.m_SubArrayLen[i]*=Dimensions[k];
}
// Allocate new elements, let exception propagate
Temp.m_pArrayElements=new T[Temp.m_nArrayElements];
// Some compilers might not
// throw exception if allocation fails
if (!Temp.m_pArrayElements)
return false;
// Copy the elements from the previous array if requested
if (PreserveElems && !empty())
Temp.copy(*this, Init);
// Otherwise initialize them to the specified value
else
Temp.initialize(Init);
// Now swap this object with the temporary
swap(Temp);
return true;
}