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; } } } }