private object ReadField(FieldFormat fieldFormat, IDictionary<string, decimal> readNumericValues)
{
List<object> values = new List<object>();
int occurs;
if (fieldFormat.HasDependencies())
{
if (readNumericValues.ContainsKey(fieldFormat.DependingOn))
{
occurs = Decimal.ToInt32(readNumericValues[fieldFormat.DependingOn]);
}
else
{
throw new System.Exception(
string.Format("Check your copybook :[{0}] is not present, but field format says it has dependencies ...",
fieldFormat.DependingOn));
}
}
else
{
occurs = fieldFormat.Occurs;
}
for (int i = 0; i < occurs; i++)
{
byte[] bytes = Read(fieldFormat.ByteSize, fieldFormat);
object value = _decoder.Decode(bytes, fieldFormat);
values.Add(value);
if (value is decimal)
{
readNumericValues[fieldFormat.Name] = (decimal)value;
}
}
if (fieldFormat.HasDependencies() || occurs > 1)
{
// if occurs is variable or greater than one, return results in a list
return values;
}
else
{
// otherwise, just return the single item
return values[0];
}
}