本文整理汇总了C#中System.Reflection.Metadata.BlobReader.ReadCompressedInteger方法的典型用法代码示例。如果您正苦于以下问题:C# BlobReader.ReadCompressedInteger方法的具体用法?C# BlobReader.ReadCompressedInteger怎么用?C# BlobReader.ReadCompressedInteger使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Reflection.Metadata.BlobReader
的用法示例。
在下文中一共展示了BlobReader.ReadCompressedInteger方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UncompressSlotMap
private unsafe static ImmutableArray<LocalSlotDebugInfo> UncompressSlotMap(ImmutableArray<byte> compressedSlotMap)
{
if (compressedSlotMap.IsDefaultOrEmpty)
{
return default(ImmutableArray<LocalSlotDebugInfo>);
}
var mapBuilder = ArrayBuilder<LocalSlotDebugInfo>.GetInstance();
int syntaxOffsetBaseline = -1;
fixed (byte* compressedSlotMapPtr = &compressedSlotMap.ToArray()[0])
{
var blobReader = new BlobReader(compressedSlotMapPtr, compressedSlotMap.Length);
while (blobReader.RemainingBytes > 0)
{
byte b = blobReader.ReadByte();
if (b == SyntaxOffsetBaseline)
{
syntaxOffsetBaseline = -blobReader.ReadCompressedInteger();
continue;
}
if (b == 0)
{
// short-lived temp, no info
mapBuilder.Add(new LocalSlotDebugInfo(SynthesizedLocalKind.LoweringTemp, default(LocalDebugId)));
continue;
}
var kind = (SynthesizedLocalKind)((b & 0x3f) - 1);
bool hasOrdinal = (b & (1 << 7)) != 0;
int syntaxOffset;
if (!blobReader.TryReadCompressedInteger(out syntaxOffset))
{
// invalid data
return default(ImmutableArray<LocalSlotDebugInfo>);
}
syntaxOffset += syntaxOffsetBaseline;
int ordinal = 0;
if (hasOrdinal && !blobReader.TryReadCompressedInteger(out ordinal))
{
// invalid data
return default(ImmutableArray<LocalSlotDebugInfo>);
}
mapBuilder.Add(new LocalSlotDebugInfo(kind, new LocalDebugId(syntaxOffset, ordinal)));
}
}
return mapBuilder.ToImmutableAndFree();
}
示例2: UncompressSlotMap
/// <exception cref="InvalidDataException">Invalid data.</exception>
private unsafe static ImmutableArray<LocalSlotDebugInfo> UncompressSlotMap(ImmutableArray<byte> compressedSlotMap)
{
if (compressedSlotMap.IsDefaultOrEmpty)
{
return default(ImmutableArray<LocalSlotDebugInfo>);
}
var mapBuilder = ArrayBuilder<LocalSlotDebugInfo>.GetInstance();
int syntaxOffsetBaseline = -1;
fixed (byte* compressedSlotMapPtr = &compressedSlotMap.ToArray()[0])
{
var blobReader = new BlobReader(compressedSlotMapPtr, compressedSlotMap.Length);
while (blobReader.RemainingBytes > 0)
{
try
{
// Note: integer operations below can't overflow since compressed integers are in range [0, 0x20000000)
byte b = blobReader.ReadByte();
if (b == SyntaxOffsetBaseline)
{
syntaxOffsetBaseline = -blobReader.ReadCompressedInteger();
continue;
}
if (b == 0)
{
// short-lived temp, no info
mapBuilder.Add(new LocalSlotDebugInfo(SynthesizedLocalKind.LoweringTemp, default(LocalDebugId)));
continue;
}
var kind = (SynthesizedLocalKind)((b & 0x3f) - 1);
bool hasOrdinal = (b & (1 << 7)) != 0;
int syntaxOffset = blobReader.ReadCompressedInteger() + syntaxOffsetBaseline;
int ordinal = hasOrdinal ? blobReader.ReadCompressedInteger() : 0;
mapBuilder.Add(new LocalSlotDebugInfo(kind, new LocalDebugId(syntaxOffset, ordinal)));
}
catch (BadImageFormatException)
{
throw CreateInvalidDataException(compressedSlotMap, blobReader.Offset);
}
}
}
return mapBuilder.ToImmutableAndFree();
}
示例3: UncompressLambdaMap
private unsafe static void UncompressLambdaMap(
ImmutableArray<byte> compressedLambdaMap,
out int methodOrdinal,
out ImmutableArray<ClosureDebugInfo> closures,
out ImmutableArray<LambdaDebugInfo> lambdas)
{
methodOrdinal = DebugId.UndefinedOrdinal;
closures = default(ImmutableArray<ClosureDebugInfo>);
lambdas = default(ImmutableArray<LambdaDebugInfo>);
if (compressedLambdaMap.IsDefaultOrEmpty)
{
return;
}
var closuresBuilder = ArrayBuilder<ClosureDebugInfo>.GetInstance();
var lambdasBuilder = ArrayBuilder<LambdaDebugInfo>.GetInstance();
fixed (byte* blobPtr = &compressedLambdaMap.ToArray()[0])
{
var blobReader = new BlobReader(blobPtr, compressedLambdaMap.Length);
try
{
// Note: integer operations below can't overflow since compressed integers are in range [0, 0x20000000)
// [-1, inf)
methodOrdinal = blobReader.ReadCompressedInteger() - 1;
int syntaxOffsetBaseline = -blobReader.ReadCompressedInteger();
int closureCount = blobReader.ReadCompressedInteger();
for (int i = 0; i < closureCount; i++)
{
int syntaxOffset = blobReader.ReadCompressedInteger();
var closureId = new DebugId(closuresBuilder.Count, generation: 0);
closuresBuilder.Add(new ClosureDebugInfo(syntaxOffset + syntaxOffsetBaseline, closureId));
}
while (blobReader.RemainingBytes > 0)
{
int syntaxOffset = blobReader.ReadCompressedInteger();
int closureOrdinal = blobReader.ReadCompressedInteger() + LambdaDebugInfo.MinClosureOrdinal;
if (closureOrdinal >= closureCount)
{
throw CreateInvalidDataException(compressedLambdaMap, blobReader.Offset);
}
var lambdaId = new DebugId(lambdasBuilder.Count, generation: 0);
lambdasBuilder.Add(new LambdaDebugInfo(syntaxOffset + syntaxOffsetBaseline, lambdaId, closureOrdinal));
}
}
catch (BadImageFormatException)
{
throw CreateInvalidDataException(compressedLambdaMap, blobReader.Offset);
}
}
closures = closuresBuilder.ToImmutableAndFree();
lambdas = lambdasBuilder.ToImmutableAndFree();
}
示例4: ReadDocumentRowId
private int ReadDocumentRowId(ref BlobReader reader)
{
int rowId = reader.ReadCompressedInteger();
if (rowId == 0)
{
throw new BadImageFormatException("Invalid handle");
}
return rowId;
}
示例5: ReadColumn
private ushort ReadColumn(ref BlobReader reader)
{
int column = reader.ReadCompressedInteger();
if (column > ushort.MaxValue)
{
throw new BadImageFormatException("SequencePointValueOutOfRange");
}
return (ushort)column;
}
示例6: ReadLine
private int ReadLine(ref BlobReader reader)
{
return reader.ReadCompressedInteger();
}
示例7: ReadDeltaLinesAndColumns
private void ReadDeltaLinesAndColumns(ref BlobReader reader, out int deltaLines, out int deltaColumns)
{
deltaLines = reader.ReadCompressedInteger();
deltaColumns = (deltaLines == 0) ? reader.ReadCompressedInteger() : reader.ReadCompressedSignedInteger();
}
示例8: GetBlobReader
private BlobReader GetBlobReader(BlobHandle handle)
{
int offset = MetadataTokens.GetHeapOffset(handle);
byte* start = _blobHeapBlob.Pointer + offset;
var reader = new BlobReader(start, _blobHeapBlob.Length - offset);
int size = reader.ReadCompressedInteger();
return new BlobReader(start + reader.Offset, size);
}
示例9: DecodeGenericTypeParameter
private TypeSignature DecodeGenericTypeParameter(
ref BlobReader signatureReader,
ImmutableArray<string> typeParameters,
int containingArity)
{
int index = signatureReader.ReadCompressedInteger();
if (index < containingArity)
{
// Unspecified type parameter.
throw UnhandledMetadata();
}
var name = typeParameters[index - containingArity];
return new QualifiedTypeSignature(null, name);
}
示例10: GetSignature
public unsafe int GetSignature(
int bufferLength,
out int count,
[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0), Out]byte[] signature)
{
var localSignatureHandle = _symMethod.MetadataReader.GetMethodBody(_symMethod.BodyHandle).LocalSignature;
var metadataImport = _symMethod.SymReader.PdbReader.MetadataImport;
var local = _symMethod.MetadataReader.GetLocalVariable(_handle);
byte* signaturePtr;
int signatureLength;
int hr = metadataImport.GetSigFromToken(MetadataTokens.GetToken(localSignatureHandle), out signaturePtr, out signatureLength);
if (hr != HResult.S_OK)
{
count = 0;
return hr;
}
var signatureReader = new BlobReader(signaturePtr, signatureLength);
SignatureHeader header = signatureReader.ReadSignatureHeader();
if (header.Kind != SignatureKind.LocalVariables)
{
count = 0;
return HResult.E_FAIL;
}
int slotCount = signatureReader.ReadCompressedInteger();
int slotIndex = local.Index;
if (slotIndex >= slotCount)
{
count = 0;
return HResult.E_FAIL;
}
var typeProvider = new DummyTypeProvider(_symMethod.MetadataReader);
for (int i = 0; i < slotIndex - 1; i++)
{
SignatureDecoder.DecodeType(ref signatureReader, typeProvider);
}
int localSlotStart = signatureReader.Offset;
SignatureDecoder.DecodeType(ref signatureReader, typeProvider);
int localSlotLength = signatureReader.Offset - localSlotStart;
if (localSlotLength <= bufferLength)
{
Marshal.Copy((IntPtr)(signaturePtr + localSlotStart), signature, 0, localSlotLength);
}
count = localSlotLength;
return HResult.S_OK;
}