本文整理汇总了C#中BlobHandle.GetHeapOffset方法的典型用法代码示例。如果您正苦于以下问题:C# BlobHandle.GetHeapOffset方法的具体用法?C# BlobHandle.GetHeapOffset怎么用?C# BlobHandle.GetHeapOffset使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BlobHandle
的用法示例。
在下文中一共展示了BlobHandle.GetHeapOffset方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetHeapOffset
/// <summary>
/// Returns the offset of metadata heap data that corresponds
/// to the specified <paramref name="handle"/>.
/// </summary>
/// <returns>
/// Zero based offset, or -1 if <paramref name="handle"/> can only be interpreted in a context of a specific <see cref="MetadataReader"/> or <see cref="MetadataBuilder"/>.
/// See <see cref="GetHeapOffset(MetadataReader, Handle)"/>.
/// </returns>
public static int GetHeapOffset(BlobHandle handle) => handle.IsVirtual ? -1 : handle.GetHeapOffset();
示例2: GetBytes
internal byte[] GetBytes(BlobHandle handle)
{
if (handle.IsVirtual)
{
// consider: if we returned an ImmutableArray we wouldn't need to copy
return GetVirtualBlobBytes(handle, unique: true);
}
int offset = handle.GetHeapOffset();
int bytesRead;
int numberOfBytes = Block.PeekCompressedInteger(offset, out bytesRead);
if (numberOfBytes == BlobReader.InvalidCompressedInteger)
{
return EmptyArray<byte>.Instance;
}
return Block.PeekBytes(offset + bytesRead, numberOfBytes);
}
示例3: GetMemoryBlock
internal MemoryBlock GetMemoryBlock(BlobHandle handle)
{
if (handle.IsVirtual)
{
return GetVirtualHandleMemoryBlock(handle);
}
int offset, size;
Block.PeekHeapValueOffsetAndSize(handle.GetHeapOffset(), out offset, out size);
return Block.GetMemoryBlockAt(offset, size);
}
示例4: GetNextHandle
internal BlobHandle GetNextHandle(BlobHandle handle)
{
if (handle.IsVirtual)
{
return default(BlobHandle);
}
int offset, size;
if (!Block.PeekHeapValueOffsetAndSize(handle.GetHeapOffset(), out offset, out size))
{
return default(BlobHandle);
}
int nextIndex = offset + size;
if (nextIndex >= Block.Length)
{
return default(BlobHandle);
}
return BlobHandle.FromOffset(nextIndex);
}
示例5: GetMemoryBlock
internal MemoryBlock GetMemoryBlock(BlobHandle handle)
{
if (handle.IsVirtual)
{
if (_lazyVirtualHeapBlobs == null)
{
Interlocked.CompareExchange(ref _lazyVirtualHeapBlobs, new VirtualHeapBlobTable(), null);
}
int index = (int)handle.GetVirtualIndex();
int length = s_virtualHeapBlobs[index].Length;
VirtualHeapBlob virtualBlob;
lock (_lazyVirtualHeapBlobs)
{
if (!_lazyVirtualHeapBlobs.Table.TryGetValue(handle, out virtualBlob))
{
virtualBlob = new VirtualHeapBlob(GetVirtualBlobArray(handle, unique: false));
_lazyVirtualHeapBlobs.Table.Add(handle, virtualBlob);
}
}
return new MemoryBlock((byte*)virtualBlob.Pinned.AddrOfPinnedObject(), length);
}
int offset, size;
Block.PeekHeapValueOffsetAndSize(handle.GetHeapOffset(), out offset, out size);
return this.Block.GetMemoryBlockAt(offset, size);
}