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); }
internal static void WriteConstant(ref BlobWriter writer, object value) { if (value == null) { // The encoding of Type for the nullref value for FieldInit is ELEMENT_TYPE_CLASS with a Value of a 32-bit. writer.WriteUInt32(0); return; } var type = value.GetType(); if (type.GetTypeInfo().IsEnum) { type = Enum.GetUnderlyingType(type); } if (type == typeof(bool)) { writer.WriteBoolean((bool)value); } else if (type == typeof(int)) { writer.WriteInt32((int)value); } else if (type == typeof(string)) { writer.WriteUTF16((string)value); } else if (type == typeof(byte)) { writer.WriteByte((byte)value); } else if (type == typeof(char)) { writer.WriteUInt16((char)value); } else if (type == typeof(double)) { writer.WriteDouble((double)value); } else if (type == typeof(short)) { writer.WriteInt16((short)value); } else if (type == typeof(long)) { writer.WriteInt64((long)value); } else if (type == typeof(sbyte)) { writer.WriteSByte((sbyte)value); } else if (type == typeof(float)) { writer.WriteSingle((float)value); } else if (type == typeof(ushort)) { writer.WriteUInt16((ushort)value); } else if (type == typeof(uint)) { writer.WriteUInt32((uint)value); } else if (type == typeof(ulong)) { writer.WriteUInt64((ulong)value); } else { // TODO: message throw new ArgumentException(); } }