本文整理汇总了C#中BlobBuilder.ToArray方法的典型用法代码示例。如果您正苦于以下问题:C# BlobBuilder.ToArray方法的具体用法?C# BlobBuilder.ToArray怎么用?C# BlobBuilder.ToArray使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BlobBuilder
的用法示例。
在下文中一共展示了BlobBuilder.ToArray方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BlobEncoder_MethodSignature
public void BlobEncoder_MethodSignature()
{
var b = new BlobBuilder();
var e = new BlobEncoder(b);
var s = e.MethodSignature();
AssertEx.Equal(new byte[] { 0x00 }, b.ToArray());
Assert.Same(b, s.Builder);
Assert.False(s.HasVarArgs);
b.Clear();
s = e.MethodSignature(
convention: SignatureCallingConvention.StdCall,
genericParameterCount: 1234,
isInstanceMethod: true);
AssertEx.Equal(new byte[] { 0x32, 0x84, 0xD2 }, b.ToArray());
Assert.False(s.HasVarArgs);
b.Clear();
s = e.MethodSignature(
convention: SignatureCallingConvention.VarArgs,
genericParameterCount: 1,
isInstanceMethod: false);
AssertEx.Equal(new byte[] { 0x15, 0x01 }, b.ToArray());
Assert.True(s.HasVarArgs);
b.Clear();
Assert.Throws<ArgumentOutOfRangeException>(() => e.MethodSignature(genericParameterCount: -1));
Assert.Throws<ArgumentOutOfRangeException>(() => e.MethodSignature(genericParameterCount: ushort.MaxValue + 1));
}
示例2: BlobEncoder_MethodSpecificationSignature
public void BlobEncoder_MethodSpecificationSignature()
{
var b = new BlobBuilder();
var e = new BlobEncoder(b);
var s = e.MethodSpecificationSignature(genericArgumentCount: 0);
AssertEx.Equal(new byte[] { 0x0A, 0x00 }, b.ToArray());
Assert.Same(b, s.Builder);
b.Clear();
e.MethodSpecificationSignature(genericArgumentCount: 1234);
AssertEx.Equal(new byte[] { 0x0A, 0x84, 0xD2 }, b.ToArray());
b.Clear();
Assert.Throws<ArgumentOutOfRangeException>(() => e.MethodSpecificationSignature(genericArgumentCount: -1));
Assert.Throws<ArgumentOutOfRangeException>(() => e.MethodSpecificationSignature(genericArgumentCount: ushort.MaxValue + 1));
}
示例3: BlobEncoder_FieldSignature
public void BlobEncoder_FieldSignature()
{
var b = new BlobBuilder();
var e = new BlobEncoder(b);
var s = e.FieldSignature();
AssertEx.Equal(new byte[] { 0x06 }, b.ToArray());
Assert.Same(b, s.Builder);
}
示例4: Add_Small
public void Add_Small()
{
var builder = new BlobBuilder();
var encoder = new ExceptionRegionEncoder(builder, hasSmallFormat: true);
encoder.Add(ExceptionRegionKind.Catch, 1, 2, 4, 5, catchType: MetadataTokens.TypeDefinitionHandle(1));
AssertEx.Equal(new byte[]
{
0x00, 0x00, // kind
0x01, 0x00, // try offset
0x02, // try length
0x04, 0x00, // handler offset
0x05, // handler length
0x01, 0x00, 0x00, 0x02 // catch type
}, builder.ToArray());
builder.Clear();
encoder.Add(ExceptionRegionKind.Filter, 0xffff, 0xff, 0xffff, 0xff, filterOffset: int.MaxValue);
AssertEx.Equal(new byte[]
{
0x01, 0x00, // kind
0xff, 0xff, // try offset
0xff, // try length
0xff, 0xff, // handler offset
0xff, // handler length
0xff, 0xff, 0xff, 0x7f // filter offset
}, builder.ToArray());
builder.Clear();
encoder.Add(ExceptionRegionKind.Fault, 0xffff, 0xff, 0xffff, 0xff);
AssertEx.Equal(new byte[]
{
0x04, 0x00, // kind
0xff, 0xff, // try offset
0xff, // try length
0xff, 0xff, // handler offset
0xff, // handler length
0x00, 0x00, 0x00, 0x00
}, builder.ToArray());
builder.Clear();
encoder.Add(ExceptionRegionKind.Finally, 0, 0, 0, 0);
AssertEx.Equal(new byte[]
{
0x02, 0x00, // kind
0x00, 0x00, // try offset
0x00, // try length
0x00, 0x00, // handler offset
0x00, // handler length
0x00, 0x00, 0x00, 0x00
}, builder.ToArray());
builder.Clear();
}
示例5: SerializeTableHeader
public void SerializeTableHeader()
{
var builder = new BlobBuilder();
builder.WriteByte(0xff);
ExceptionRegionEncoder.SerializeTableHeader(builder, ExceptionRegionEncoder.MaxSmallExceptionRegions, hasSmallRegions: true);
AssertEx.Equal(new byte[]
{
0xff, 0x00, 0x00, 0x00, // padding
0x01, // flags
0xf4, // size
0x00, 0x00
}, builder.ToArray());
builder.Clear();
builder.WriteByte(0xff);
ExceptionRegionEncoder.SerializeTableHeader(builder, ExceptionRegionEncoder.MaxExceptionRegions, hasSmallRegions: false);
AssertEx.Equal(new byte[]
{
0xff, 0x00, 0x00, 0x00, // padding
0x41, // flags
0xf4, 0xff, 0xff, // size
}, builder.ToArray());
}
示例6: CountClear
public void CountClear()
{
var builder = new BlobBuilder();
Assert.Equal(0, builder.Count);
builder.WriteByte(1);
Assert.Equal(1, builder.Count);
builder.WriteInt32(4);
Assert.Equal(5, builder.Count);
builder.Clear();
Assert.Equal(0, builder.Count);
builder.WriteInt64(1);
Assert.Equal(8, builder.Count);
AssertEx.Equal(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, builder.ToArray());
}
示例7: OpCode
public void OpCode()
{
var builder = new BlobBuilder();
builder.WriteByte(0xff);
var il = new InstructionEncoder(builder);
Assert.Equal(1, il.Offset);
il.OpCode(ILOpCode.Add);
Assert.Equal(2, il.Offset);
builder.WriteByte(0xee);
Assert.Equal(3, il.Offset);
il.OpCode(ILOpCode.Arglist);
Assert.Equal(5, il.Offset);
builder.WriteByte(0xdd);
Assert.Equal(6, il.Offset);
il.OpCode(ILOpCode.Readonly);
Assert.Equal(8, il.Offset);
builder.WriteByte(0xcc);
Assert.Equal(9, il.Offset);
AssertEx.Equal(new byte[]
{
0xFF,
0x58,
0xEE,
0xFE, 0x00,
0xDD,
0xFE, 0x1E,
0xCC
}, builder.ToArray());
}
示例8: AddMethodBody_Reserved_Tiny1
public void AddMethodBody_Reserved_Tiny1()
{
var streamBuilder = new BlobBuilder(32);
var encoder = new MethodBodyStreamEncoder(streamBuilder);
streamBuilder.WriteBytes(0x01, 3);
var body = encoder.AddMethodBody(10);
Assert.Equal(3, body.Offset);
var segment = body.Instructions.GetBytes();
Assert.Equal(4, segment.Offset); // +1 byte for the header
Assert.Equal(10, segment.Count);
Assert.Null(body.ExceptionRegions.Builder);
new BlobWriter(body.Instructions).WriteBytes(0x02, 10);
AssertEx.Equal(new byte[]
{
0x01, 0x01, 0x01,
0x2A, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02
}, streamBuilder.ToArray());
}
示例9: AddMethodBody_Reserved_Exceptions_Fat1
public void AddMethodBody_Reserved_Exceptions_Fat1()
{
var streamBuilder = new BlobBuilder(32);
var encoder = new MethodBodyStreamEncoder(streamBuilder);
streamBuilder.WriteBytes(0x01, 3);
var body = encoder.AddMethodBody(10, exceptionRegionCount: 699050);
Assert.Equal(4, body.Offset); // 4B aligned
var segment = body.Instructions.GetBytes();
Assert.Equal(16, segment.Offset); // +12 byte for the header
Assert.Equal(10, segment.Count);
Assert.Same(streamBuilder, body.ExceptionRegions.Builder);
new BlobWriter(body.Instructions).WriteBytes(0x02, 10);
AssertEx.Equal(new byte[]
{
0x01, 0x01, 0x01,
0x00, // padding
0x1B, 0x30, // flags
0x08, 0x00, // max stack
0x0A, 0x00, 0x00, 0x00, // code size
0x00, 0x00, 0x00, 0x00, // local sig
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
// exception table
0x00, 0x00, // padding
0x41, // kind
0xF4, 0xFF, 0xFF // size fo the table
}, streamBuilder.ToArray());
}
示例10: AddMethodBody_Reserved_Fat2
public void AddMethodBody_Reserved_Fat2()
{
var streamBuilder = new BlobBuilder(32);
var encoder = new MethodBodyStreamEncoder(streamBuilder);
streamBuilder.WriteBytes(0x01, 3);
var body = encoder.AddMethodBody(10, localVariablesSignature: MetadataTokens.StandaloneSignatureHandle(0xABCDEF));
Assert.Equal(4, body.Offset); // 4B aligned
var segment = body.Instructions.GetBytes();
Assert.Equal(16, segment.Offset); // +12 byte for the header
Assert.Equal(10, segment.Count);
Assert.Null(body.ExceptionRegions.Builder);
new BlobWriter(body.Instructions).WriteBytes(0x02, 10);
AssertEx.Equal(new byte[]
{
0x01, 0x01, 0x01,
0x00, // padding
0x13, 0x30,
0x08, 0x00, // max stack
0x0A, 0x00, 0x00, 0x00, // code size
0xEF, 0xCD, 0xAB, 0x11, // local sig
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02
}, streamBuilder.ToArray());
}
示例11: AddMethodBody_Reserved_Fat1
public void AddMethodBody_Reserved_Fat1()
{
var streamBuilder = new BlobBuilder(32);
var encoder = new MethodBodyStreamEncoder(streamBuilder);
streamBuilder.WriteBytes(0x01, 3);
var body = encoder.AddMethodBody(10, maxStack: 9);
Assert.Equal(4, body.Offset); // 4B aligned
var segment = body.Instructions.GetBytes();
Assert.Equal(16, segment.Offset); // +12 byte for the header
Assert.Equal(10, segment.Count);
Assert.Null(body.ExceptionRegions.Builder);
new BlobWriter(body.Instructions).WriteBytes(0x02, 10);
AssertEx.Equal(new byte[]
{
0x01, 0x01, 0x01,
0x00, // padding
0x13, 0x30,
0x09, 0x00, // max stack
0x0A, 0x00, 0x00, 0x00, // code size
0x00, 0x00, 0x00, 0x00, // local sig
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02
}, streamBuilder.ToArray());
}
示例12: AddMethodBody_Reserved_Tiny_Empty
public void AddMethodBody_Reserved_Tiny_Empty()
{
var streamBuilder = new BlobBuilder();
var encoder = new MethodBodyStreamEncoder(streamBuilder);
var body = encoder.AddMethodBody(0);
Assert.Equal(0, body.Offset);
var segment = body.Instructions.GetBytes();
Assert.Equal(1, segment.Offset); // +1 byte for the header
Assert.Equal(0, segment.Count);
Assert.Null(body.ExceptionRegions.Builder);
AssertEx.Equal(new byte[]
{
0x02
}, streamBuilder.ToArray());
}
示例13: ReserveBytes1
public void ReserveBytes1()
{
var builder = new BlobBuilder(16);
var writer0 = new BlobWriter(builder.ReserveBytes(0));
var writer1 = new BlobWriter(builder.ReserveBytes(1));
var writer2 = new BlobWriter(builder.ReserveBytes(2));
Assert.Equal(3, builder.Count);
AssertEx.Equal(new byte[] { 0, 0, 0 }, builder.ToArray());
Assert.Equal(0, writer0.Length);
Assert.Equal(0, writer0.RemainingBytes);
writer1.WriteBoolean(true);
Assert.Equal(1, writer1.Length);
Assert.Equal(0, writer1.RemainingBytes);
writer2.WriteByte(1);
Assert.Equal(2, writer2.Length);
Assert.Equal(1, writer2.RemainingBytes);
}
示例14: LinkSuffix_Empty3
public void LinkSuffix_Empty3()
{
var builder1 = new BlobBuilder(16);
builder1.ReserveBytes(16);
builder1.ReserveBytes(0);
var builder2 = new BlobBuilder(16);
builder2.ReserveBytes(16);
builder2.ReserveBytes(0);
builder1.LinkSuffix(builder2);
AssertEx.Equal(new byte[]
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}, builder1.ToArray());
Assert.Equal(32, builder1.Count);
Assert.Equal(16, builder2.Count);
}
示例15: Branches1
public void Branches1()
{
var branchBuilder = new BranchBuilder();
var l0 = branchBuilder.AddLabel();
var l64 = branchBuilder.AddLabel();
var l255 = branchBuilder.AddLabel();
branchBuilder.MarkLabel(0, l0);
branchBuilder.MarkLabel(64, l64);
branchBuilder.MarkLabel(255, l255);
branchBuilder.AddBranch(0, l255, (byte)ILOpCode.Bge_s);
branchBuilder.AddBranch(16, l0, (byte)ILOpCode.Bge_un_s); // blob boundary
branchBuilder.AddBranch(33, l255, (byte)ILOpCode.Ble_s); // blob boundary
branchBuilder.AddBranch(35, l0, (byte)ILOpCode.Ble_un_s); // branches immediately next to each other
branchBuilder.AddBranch(37, l255, (byte)ILOpCode.Blt_s); // branches immediately next to each other
branchBuilder.AddBranch(40, l64, (byte)ILOpCode.Blt_un_s);
branchBuilder.AddBranch(254, l0, (byte)ILOpCode.Brfalse_s); // long branch at the end
var dstBuilder = new BlobBuilder();
var srcBuilder = new BlobBuilder(size: 17);
WriteFakeILWithBranches(srcBuilder, branchBuilder, size: 256);
branchBuilder.FixupBranches(srcBuilder, dstBuilder);
AssertEx.Equal(new byte[]
{
(byte)ILOpCode.Bge, 0xFA, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
(byte)ILOpCode.Bge_un_s, 0xEE,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
(byte)ILOpCode.Ble, 0xD9, 0x00, 0x00, 0x00,
(byte)ILOpCode.Ble_un_s, 0xDB,
(byte)ILOpCode.Blt, 0xD5, 0x00, 0x00, 0x00,
0x01,
(byte)ILOpCode.Blt_un_s, 0x16,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01,
(byte)ILOpCode.Brfalse, 0xFD, 0xFE, 0xFF, 0xFF,
}, dstBuilder.ToArray());
}