// dnlib: See LICENSE.txt for more info using System; using dnlib.DotNet.MD; using dnlib.IO; using dnlib.Protection; namespace dnlib.DotNet.Writer { /// /// Copies existing data to a new metadata heap /// public sealed class DataReaderHeap : HeapBase { /// /// Gets the name of the heap /// public override string Name { get; } internal DotNetStream OptionalOriginalStream { get; } readonly DataReader heapReader; /// /// Constructor /// /// The stream whose data will be copied to the new metadata file public DataReaderHeap(DotNetStream stream) { OptionalOriginalStream = stream ?? throw new ArgumentNullException(nameof(stream)); heapReader = stream.CreateReader(); Name = stream.Name; } /// /// Constructor /// /// Heap name /// Heap content public DataReaderHeap(string name, DataReader heapReader) { this.heapReader = heapReader; this.heapReader.Position = 0; Name = name ?? throw new ArgumentNullException(nameof(name)); } /// public override uint GetRawLength() => heapReader.Length; protected override EncryptionMethod GetEncryptionMethod(IEncryption e) => null; /// protected override void WriteToImpl(DataWriter writer) => heapReader.CopyTo(writer); } }