// // Author: // Jb Evain (jbevain@gmail.com) // // Copyright (c) 2008 - 2015 Jb Evain // Copyright (c) 2008 - 2011 Novell, Inc. // // Licensed under the MIT/X11 license. // using System; namespace MonoFN.Cecil.Metadata { internal sealed class BlobHeap : Heap { public BlobHeap(byte[] data) : base(data) { } public byte[] Read(uint index) { if (index == 0 || index > data.Length - 1) return Empty.Array; int position = (int)index; int length = (int)data.ReadCompressedUInt32(ref position); if (length > data.Length - position) return Empty.Array; byte[] buffer = new byte [length]; Buffer.BlockCopy(data, position, buffer, 0, length); return buffer; } public void GetView(uint signature, out byte[] buffer, out int index, out int length) { if (signature == 0 || signature > data.Length - 1) { buffer = null; index = length = 0; return; } buffer = data; index = (int)signature; length = (int)buffer.ReadCompressedUInt32(ref index); } } }