private void NextRectangleMap(ParseRecord pr)
{
// For each invocation, calculate the next rectangular array position
// example
// indexMap 0 [0,0,0]
// indexMap 1 [0,0,1]
// indexMap 2 [0,0,2]
// indexMap 3 [0,0,3]
// indexMap 4 [0,1,0]
for (int irank = pr._rank - 1; irank > -1; irank--)
{
// Find the current or lower dimension which can be incremented.
if (pr._rectangularMap[irank] < pr._lengthA[irank] - 1)
{
// The current dimension is at maximum. Increase the next lower dimension by 1
pr._rectangularMap[irank]++;
if (irank < pr._rank - 1)
{
// The current dimension and higher dimensions are zeroed.
for (int i = irank + 1; i < pr._rank; i++)
{
pr._rectangularMap[i] = 0;
}
}
Array.Copy(pr._rectangularMap, 0, pr._indexMap, 0, pr._rank);
break;
}
}
}