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