forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
//
 | 
						|
// 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 {
 | 
						|
 | 
						|
	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);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |