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