Example #1
0
        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;
Example #2
0
        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;
            }
        }