// dnlib: See LICENSE.txt for more info using System; namespace dnlib.IO { /// /// A that reads from a byte array /// public sealed class ByteArrayDataReaderFactory : DataReaderFactory { /// /// The filename or null if the data is not from a file /// public override string Filename => filename; /// /// Gets the total length of the data /// public override uint Length => length; internal byte[] DataArray => data; internal uint DataOffset => 0; DataStream stream; string filename; uint length; byte[] data; ByteArrayDataReaderFactory(byte[] data, string filename) { this.filename = filename; length = (uint)data.Length; stream = DataStreamFactory.Create(data); this.data = data; } /// /// Creates a instance /// /// Data /// The filename or null if the data is not from a file /// public static ByteArrayDataReaderFactory Create(byte[] data, string filename) { if (data is null) throw new ArgumentNullException(nameof(data)); return new ByteArrayDataReaderFactory(data, filename); } /// /// Creates a data reader /// /// Data /// public static DataReader CreateReader(byte[] data) => Create(data, filename: null).CreateReader(); /// /// Creates a data reader /// /// Offset of data /// Length of data /// public override DataReader CreateReader(uint offset, uint length) => CreateReader(stream, offset, length); /// /// This method doesn't need to be called since a has nothing that must be cleaned up /// public override void Dispose() { stream = EmptyDataStream.Instance; length = 0; filename = null; data = null; } } }