You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.0 KiB
54 lines
1.0 KiB
// |
|
// 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 ILRuntime.Mono.Cecil.Metadata { |
|
|
|
sealed class BlobHeap : Heap { |
|
|
|
public BlobHeap (byte [] data) |
|
: base (data) |
|
{ |
|
} |
|
|
|
public byte [] Read (uint index) |
|
{ |
|
if (index == 0 || index > this.data.Length - 1) |
|
return Empty<byte>.Array; |
|
|
|
int position = (int) index; |
|
int length = (int) data.ReadCompressedUInt32 (ref position); |
|
|
|
if (length > data.Length - position) |
|
return Empty<byte>.Array; |
|
|
|
var 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); |
|
} |
|
} |
|
}
|
|
|