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