private void ProcessLayout(TagLayoutGuess layout)
{
for (uint offset = 0; offset < layout.Size; offset += 4)
{
var guess = layout.TryGet(offset);
if (guess != null)
{
guess.Accept(offset, this);
offset += guess.Size - 4;
}
else
{
var remaining = layout.Size - offset;
switch (remaining)
{
case 3:
_result.Add(MakeField(offset, BasicFieldType.Int16));
_result.Add(MakeField(offset, BasicFieldType.Int8));
break;
case 2:
_result.Add(MakeField(offset, BasicFieldType.Int16));
break;
case 1:
_result.Add(MakeField(offset, BasicFieldType.Int8));
break;
default: // >= 4
_result.Add(MakeField(offset, BasicFieldType.Int32));
break;
}
}
}
}