private static int GetOptionalFieldValueSize(SAMOptionalField optionalField)
{
switch (optionalField.VType)
{
case "A": // Printable character
case "c": //signed 8-bit integer
return -1;
case "C": //unsigned 8-bit integer
return 1;
case "s": // signed 16 bit integer
case "S"://unsinged 16 bit integer
case "i": // signed 32 bit integer
case "I": // unsigned 32 bit integer
return GetOptionalFieldIntValueSize(optionalField.Value);
case "f": // float
return 4;
case "Z": // printable string
case "H": // HexString
return optionalField.Value.Length + 1;
case "B"://integer or numeric array
char type = optionalField.Value[0];
int arrayTypeSize = GetSizeOfArrayType(type);
int numberofelements = optionalField.Value.Split(DelimComma, StringSplitOptions.RemoveEmptyEntries).Length - 1;
int elementsSize = arrayTypeSize * numberofelements;
int arraylen = elementsSize + 1 + 4; // 1 to store array type and 4 to store number of values in array.
return arraylen;
default:
throw new Exception(Properties.Resource.BAM_InvalidOptValType);
}
}