private int[] ParseArrayDimensions(String dimString, out int rank, out String dimSignature, out InternalArrayTypeE arrayTypeEnum)
{
InternalST.Soap( this, "ProcessArrayDimensions Enter ",dimString);
char[] dimArray = dimString.ToCharArray();
int paramCount = 0;
int commaCount = 0;
int rankCount = 0;
int[] dim = new int[dimArray.Length];
StringBuilder sb = new StringBuilder(10);
StringBuilder sigSb = new StringBuilder(10);
for (int i=0; i<dimArray.Length; i++)
{
if (dimArray[i] == '[')
{
paramCount++;
sigSb.Append(dimArray[i]);
}
else if (dimArray[i] == ']')
{
if (sb.Length > 0)
{
dim[rankCount++] = Int32.Parse(sb.ToString(), CultureInfo.InvariantCulture);
sb.Length = 0;
}
sigSb.Append(dimArray[i]);
}
else if (dimArray[i] == ',')
{
commaCount++;
if (sb.Length > 0)
{
dim[rankCount++] = Int32.Parse(sb.ToString(), CultureInfo.InvariantCulture);
sb.Length = 0;
}
sigSb.Append(dimArray[i]);
}
else if ((dimArray[i] == '-') || (Char.IsDigit(dimArray[i])))
{
sb.Append(dimArray[i]);
}
else
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_ArrayDimensions"),dimString));
}
rank = rankCount;
dimSignature = sigSb.ToString();
int[] dimA = new int[rank];
for (int i=0; i<rank; i++)
{
dimA[i] = dim[i];
}
InternalArrayTypeE outEnum = InternalArrayTypeE.Empty;
if (commaCount > 0)
outEnum = InternalArrayTypeE.Rectangular;
else
outEnum = InternalArrayTypeE.Single;
arrayTypeEnum = outEnum;
InternalST.Soap( this, "ProcessArrayDimensions Exit rank ",rank," dimSignature ",sigSb.ToString()," arrayTypeEnum ",((Enum)outEnum).ToString());
return dimA;
}