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