public void FillMajorRecords( OverlayStream stream, int finalPos, int offset, RecordTypeConverter?recordTypeConverter, RecordTypeFillWrapper fill) { int?lastParsed = null; Dictionary <RecordType, int>?recordParseCount = null; while (!stream.Complete && stream.Position < finalPos) { MajorRecordHeader majorMeta = stream.GetMajorRecord(); var minimumFinalPos = stream.Position + majorMeta.TotalLength; var parsed = fill( stream: stream, finalPos: finalPos, offset: offset, recordParseCount: recordParseCount, type: majorMeta.RecordType, lastParsed: lastParsed, recordTypeConverter: recordTypeConverter); if (!parsed.KeepParsing) { break; } if (parsed.DuplicateParseMarker != null) { if (recordParseCount == null) { recordParseCount = new Dictionary <RecordType, int>(); } recordParseCount[parsed.DuplicateParseMarker !.Value] = recordParseCount.GetOrAdd(parsed.DuplicateParseMarker !.Value) + 1;
public void FillMajorRecords( OverlayStream stream, int finalPos, int offset, RecordTypeConverter?recordTypeConverter, RecordTypeFillWrapper fill) { int?lastParsed = null; while (!stream.Complete && stream.Position < finalPos) { MajorRecordHeader majorMeta = stream.GetMajorRecord(); var minimumFinalPos = stream.Position + majorMeta.TotalLength; var parsed = fill( stream: stream, finalPos: finalPos, offset: offset, type: majorMeta.RecordType, lastParsed: lastParsed, recordTypeConverter: recordTypeConverter); if (parsed.Failed) { break; } if (minimumFinalPos > stream.Position) { stream.Position = checked ((int)minimumFinalPos); } lastParsed = parsed.Value; } }