本文整理汇总了C#中BlobBuilder.WriteCompressedInteger方法的典型用法代码示例。如果您正苦于以下问题:C# BlobBuilder.WriteCompressedInteger方法的具体用法?C# BlobBuilder.WriteCompressedInteger怎么用?C# BlobBuilder.WriteCompressedInteger使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BlobBuilder
的用法示例。
在下文中一共展示了BlobBuilder.WriteCompressedInteger方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SerializeDocumentName
private BlobHandle SerializeDocumentName(string name)
{
Debug.Assert(name != null);
int c1 = Count(name, s_separator1[0]);
int c2 = Count(name, s_separator2[0]);
char[] separator = (c1 >= c2) ? s_separator1 : s_separator2;
// Estimate 2 bytes per part, if the blob heap gets big we expand the builder once.
var writer = new BlobBuilder(1 + Math.Max(c1, c2) * 2);
writer.WriteByte((byte)separator[0]);
// TODO: avoid allocations
foreach (var part in name.Split(separator))
{
BlobHandle partIndex = GetOrAddBlob(ImmutableArray.Create(MetadataWriter.s_utf8Encoding.GetBytes(part)));
writer.WriteCompressedInteger(MetadataTokens.GetHeapOffset(partIndex));
}
return GetOrAddBlob(writer);
}
示例2: SerializeSpans
private BlobHandle SerializeSpans(
ImmutableArray<SourceSpan> spans,
Dictionary<DebugSourceDocument, int> documentIndex)
{
if (spans.Length == 0)
{
return default(BlobHandle);
}
// 4 bytes per span plus a header, the builder expands by the same amount.
var writer = new BlobBuilder(4 + spans.Length * 4);
int previousStartLine = -1;
int previousStartColumn = -1;
DebugSourceDocument previousDocument = spans[0].Document;
// header:
writer.WriteCompressedInteger(GetOrAddDocument(previousDocument, documentIndex));
for (int i = 0; i < spans.Length; i++)
{
var currentDocument = spans[i].Document;
if (previousDocument != currentDocument)
{
writer.WriteInt16(0);
writer.WriteCompressedInteger(GetOrAddDocument(currentDocument, documentIndex));
previousDocument = currentDocument;
}
// Delta Lines & Columns:
SerializeDeltaLinesAndColumns(writer, spans[i]);
// delta Start Lines & Columns:
if (previousStartLine < 0)
{
Debug.Assert(previousStartColumn < 0);
writer.WriteCompressedInteger(spans[i].StartLine);
writer.WriteCompressedInteger(spans[i].StartColumn);
}
else
{
writer.WriteCompressedSignedInteger(spans[i].StartLine - previousStartLine);
writer.WriteCompressedSignedInteger(spans[i].StartColumn - previousStartColumn);
}
previousStartLine = spans[i].StartLine;
previousStartColumn = spans[i].StartColumn;
}
return GetOrAddBlob(writer);
}
示例3: SerializeDeltaLinesAndColumns
private void SerializeDeltaLinesAndColumns(BlobBuilder writer, SourceSpan span)
{
int deltaLines = span.EndLine - span.StartLine;
int deltaColumns = span.EndColumn - span.StartColumn;
// spans can't have zero width
Debug.Assert(deltaLines != 0 || deltaColumns != 0);
writer.WriteCompressedInteger(deltaLines);
if (deltaLines == 0)
{
writer.WriteCompressedInteger(deltaColumns);
}
else
{
writer.WriteCompressedSignedInteger(deltaColumns);
}
}
示例4: CompressUnsignedIntegersFromSpecExamples
public void CompressUnsignedIntegersFromSpecExamples()
{
// These examples are straight from the CLI spec.
TestCompressedUnsignedInteger(new byte[] { 0x00 }, 0);
TestCompressedUnsignedInteger(new byte[] { 0x03 }, 0x03);
TestCompressedUnsignedInteger(new byte[] { 0x7f }, 0x7F);
TestCompressedUnsignedInteger(new byte[] { 0x80, 0x80 }, 0x80);
TestCompressedUnsignedInteger(new byte[] { 0xAE, 0x57 }, 0x2E57);
TestCompressedUnsignedInteger(new byte[] { 0xBF, 0xFF }, 0x3FFF);
TestCompressedUnsignedInteger(new byte[] { 0xC0, 0x00, 0x40, 0x00 }, 0x4000);
TestCompressedUnsignedInteger(new byte[] { 0xDF, 0xFF, 0xFF, 0xFF }, 0x1FFFFFFF);
var writer = new BlobWriter(4);
var builder = new BlobBuilder();
Assert.Throws<ArgumentOutOfRangeException>(() => writer.WriteCompressedInteger(-1));
Assert.Throws<ArgumentOutOfRangeException>(() => writer.WriteCompressedInteger(BlobWriterImpl.MaxCompressedIntegerValue + 1));
Assert.Throws<ArgumentOutOfRangeException>(() => builder.WriteCompressedInteger(-1));
Assert.Throws<ArgumentOutOfRangeException>(() => builder.WriteCompressedInteger(BlobWriterImpl.MaxCompressedIntegerValue + 1));
}
示例5: TestCompressedUnsignedInteger
// TODO:
// WriteBytes(byte*)
// WriteBytes(stream)
// WriteBytes(byte[])
// WriteBytes(IA<byte>)
// WriteReference
private static void TestCompressedUnsignedInteger(byte[] expected, int value)
{
var writer = new BlobWriter(4);
writer.WriteCompressedInteger(value);
AssertEx.Equal(expected, writer.ToArray());
var builder = new BlobBuilder();
builder.WriteCompressedInteger(value);
AssertEx.Equal(expected, builder.ToArray());
}
示例6: SerializeLambdaMap
internal void SerializeLambdaMap(BlobBuilder writer)
{
Debug.Assert(this.MethodOrdinal >= -1);
writer.WriteCompressedInteger(this.MethodOrdinal + 1);
int syntaxOffsetBaseline = -1;
foreach (ClosureDebugInfo info in this.Closures)
{
if (info.SyntaxOffset < syntaxOffsetBaseline)
{
syntaxOffsetBaseline = info.SyntaxOffset;
}
}
foreach (LambdaDebugInfo info in this.Lambdas)
{
if (info.SyntaxOffset < syntaxOffsetBaseline)
{
syntaxOffsetBaseline = info.SyntaxOffset;
}
}
writer.WriteCompressedInteger(-syntaxOffsetBaseline);
writer.WriteCompressedInteger(this.Closures.Length);
foreach (ClosureDebugInfo info in this.Closures)
{
writer.WriteCompressedInteger(info.SyntaxOffset - syntaxOffsetBaseline);
}
foreach (LambdaDebugInfo info in this.Lambdas)
{
Debug.Assert(info.ClosureOrdinal >= LambdaDebugInfo.MinClosureOrdinal);
Debug.Assert(info.LambdaId.Generation == 0);
writer.WriteCompressedInteger(info.SyntaxOffset - syntaxOffsetBaseline);
writer.WriteCompressedInteger(info.ClosureOrdinal - LambdaDebugInfo.MinClosureOrdinal);
}
}
示例7: SerializeLocalSlots
internal void SerializeLocalSlots(BlobBuilder writer)
{
int syntaxOffsetBaseline = -1;
foreach (LocalSlotDebugInfo localSlot in this.LocalSlots)
{
if (localSlot.Id.SyntaxOffset < syntaxOffsetBaseline)
{
syntaxOffsetBaseline = localSlot.Id.SyntaxOffset;
}
}
if (syntaxOffsetBaseline != -1)
{
writer.WriteByte(SyntaxOffsetBaseline);
writer.WriteCompressedInteger(-syntaxOffsetBaseline);
}
foreach (LocalSlotDebugInfo localSlot in this.LocalSlots)
{
SynthesizedLocalKind kind = localSlot.SynthesizedKind;
Debug.Assert(kind <= SynthesizedLocalKind.MaxValidValueForLocalVariableSerializedToDebugInformation);
if (!kind.IsLongLived())
{
writer.WriteByte(0);
continue;
}
byte b = (byte)(kind + 1);
Debug.Assert((b & (1 << 7)) == 0);
bool hasOrdinal = localSlot.Id.Ordinal > 0;
if (hasOrdinal)
{
b |= 1 << 7;
}
writer.WriteByte(b);
writer.WriteCompressedInteger(localSlot.Id.SyntaxOffset - syntaxOffsetBaseline);
if (hasOrdinal)
{
writer.WriteCompressedInteger(localSlot.Id.Ordinal);
}
}
}