protected int GetArrayOffset(TargetMemoryAccess target, int[] indices)
{
if (!GetArrayBounds(target))
{
throw new LocationInvalidException();
}
if (indices.Length != Rank)
{
throw new ArgumentException();
}
if (bounds.IsMultiDimensional)
{
for (int i = 0; i < Rank; i++)
{
if (indices [i] < bounds.LowerBounds [i])
{
throw new ArgumentException();
}
if (indices [i] > bounds.UpperBounds [i])
{
throw new ArgumentException();
}
}
}
else if (!bounds.IsUnbound &&
((indices [0] < 0) || (indices [0] >= bounds.Length)))
{
throw new ArgumentException();
}
int index = indices [0];
for (int i = 1; i < Rank; i++)
{
int length = bounds.UpperBounds [i] - bounds.LowerBounds [i] + 1;
index = index * length + indices [i];
}
return(index * Type.GetElementSize(target));
}