template <class T>
void CSystem<T>::allocate (unsigned int unRows, unsigned int unCols, T** &aatArray)
{
    aatArray = new T*[unRows];
    aatArray[0] = new T[unRows*unCols];
    for (unsigned int unRow = 1; unRow < unRows; unRow++)
    {
        aatArray[unRow] = &aatArray[0][unCols*unRow];
    }
}

template <class T>
void CSystem<T>::deallocate (T**& aatArray)
{
    delete[] aatArray[0];
    delete[] aatArray;
    aatArray = 0;
}

template <class T>
void CSystem<T>::allocate (unsigned int unRows, unsigned int unCols, unsigned int unSlices, T*** &aaatArray)
{
    aaatArray = new T**[unRows];
    aaatArray[0] = new T*[unRows*unCols];
    aaatArray[0][0] = new T[unRows*unCols*unSlices];
    for (unsigned int unRow = 0; unRow < unRows; unRow++)
    {
        aaatArray[unRow] = &aaatArray[0][unRow*unCols];
        for (unsigned int unCol = 0; unCol < unCols; unCol++)
        {
            aaatArray[unRow][unCol] =
                &aaatArray[0][0][unRow*(unCols*unSlices)+unCol*unSlices];
        }
    }
}

template <class T>
void CSystem<T>::deallocate (T***& aaatArray)
{
  //    fairAssert(aaatArray != NULL, "Assertion while trying to deallocate null pointer reference");
    delete[] aaatArray[0][0];
    delete[] aaatArray[0];
    delete[] aaatArray;
    aaatArray = 0;
}
