コード例 #1
0
ファイル: BinaryOverlayList.cs プロジェクト: erri120/Mutagen
 public BinaryOverlayRecordListByLocationArray(
     ReadOnlyMemorySlice <byte> mem,
     BinaryOverlayFactoryPackage package,
     RecordTypeConverter?recordTypeConverter,
     PluginBinaryOverlay.SpanRecordFactory <T> getter,
     int[] locs)
 {
     this._mem                 = mem;
     this._getter              = getter;
     this._package             = package;
     this._recordTypeConverter = recordTypeConverter;
     this._locations           = locs;
 }
コード例 #2
0
ファイル: BinaryOverlayList.cs プロジェクト: erri120/Mutagen
        public static IReadOnlyList <T> FactoryByCountPerItem <T>(
            OverlayStream stream,
            BinaryOverlayFactoryPackage package,
            int countLength,
            RecordType subrecordType,
            RecordType countType,
            RecordTypeConverter?recordTypeConverter,
            PluginBinaryOverlay.SpanRecordFactory <T> getter,
            bool skipHeader = true)
        {
            var mem           = stream.RemainingMemory;
            var initialHeader = package.MetaData.Constants.SubrecordFrame(mem);
            var recType       = initialHeader.RecordType;

            if (recType == countType)
            {
                var count = countLength switch
                {
                    1 => initialHeader.Content[0],
                    2 => BinaryPrimitives.ReadUInt16LittleEndian(initialHeader.Content),
                    4 => BinaryPrimitives.ReadUInt32LittleEndian(initialHeader.Content),
                    _ => throw new NotImplementedException(),
                };
                stream.Position += initialHeader.TotalLength;
                return(FactoryByArray(
                           mem: stream.RemainingMemory,
                           package: package,
                           recordTypeConverter: recordTypeConverter,
                           getter: getter,
                           locs: PluginBinaryOverlay.ParseRecordLocationsByCount(
                               stream: stream,
                               count: count,
                               trigger: subrecordType,
                               constants: package.MetaData.Constants.SubConstants,
                               skipHeader: false)));
            }
            else
            {
                return(FactoryByArray(
                           mem: stream.RemainingMemory,
                           package: package,
                           recordTypeConverter: recordTypeConverter,
                           getter: getter,
                           locs: PluginBinaryOverlay.ParseRecordLocations(
                               stream: stream,
                               constants: package.MetaData.Constants.SubConstants,
                               trigger: subrecordType,
                               skipHeader: skipHeader,
                               recordTypeConverter: recordTypeConverter)));
            }
        }
コード例 #3
0
ファイル: BinaryOverlayList.cs プロジェクト: erri120/Mutagen
 public static IReadOnlyList <T> FactoryByArray <T>(
     ReadOnlyMemorySlice <byte> mem,
     BinaryOverlayFactoryPackage package,
     RecordTypeConverter?recordTypeConverter,
     PluginBinaryOverlay.SpanRecordFactory <T> getter,
     int[] locs)
 {
     return(new BinaryOverlayRecordListByLocationArray <T>(
                mem,
                package,
                recordTypeConverter,
                getter,
                locs));
 }