/** <inheritDoc /> */ public void ReadBinary(IBinaryReader reader) { Byte = reader.ReadByte("Byte"); ByteArray = reader.ReadByteArray("ByteArray"); Char = reader.ReadChar("Char"); CharArray = reader.ReadCharArray("CharArray"); Short = reader.ReadShort("Short"); ShortArray = reader.ReadShortArray("ShortArray"); Int = reader.ReadInt("Int"); IntArray = reader.ReadIntArray("IntArray"); Long = reader.ReadLong("Long"); LongArray = reader.ReadLongArray("LongArray"); Boolean = reader.ReadBoolean("Boolean"); BooleanArray = reader.ReadBooleanArray("BooleanArray"); Float = reader.ReadFloat("Float"); FloatArray = reader.ReadFloatArray("FloatArray"); Double = reader.ReadDouble("Double"); DoubleArray = reader.ReadDoubleArray("DoubleArray"); Decimal = reader.ReadDecimal("Decimal"); DecimalArray = reader.ReadDecimalArray("DecimalArray"); Date = reader.ReadTimestamp("Date"); DateArray = reader.ReadTimestampArray("DateArray"); String = reader.ReadString("String"); StringArray = reader.ReadStringArray("StringArray"); Guid = reader.ReadObject <Guid>("Guid"); GuidArray = reader.ReadGuidArray("GuidArray"); }
public void ReadBinary(IBinaryReader reader) { Assert.AreEqual(1, reader.ReadByte("Byte")); Assert.AreEqual(new byte[] { 1 }, reader.ReadByteArray("ByteArray")); Assert.AreEqual('1', reader.ReadChar("Char")); Assert.AreEqual(new[] { '1' }, reader.ReadCharArray("CharArray")); Assert.AreEqual(1, reader.ReadShort("Short")); Assert.AreEqual(new short[] { 1 }, reader.ReadShortArray("ShortArray")); Assert.AreEqual(1, reader.ReadInt("Int")); Assert.AreEqual(new[] { 1 }, reader.ReadIntArray("IntArray")); Assert.AreEqual(1, reader.ReadLong("Long")); Assert.AreEqual(new long[] { 1 }, reader.ReadLongArray("LongArray")); Assert.AreEqual(true, reader.ReadBoolean("Boolean")); Assert.AreEqual(new[] { true }, reader.ReadBooleanArray("BooleanArray")); Assert.AreEqual(1, reader.ReadFloat("Float")); Assert.AreEqual(new float[] { 1 }, reader.ReadFloatArray("FloatArray")); Assert.AreEqual(1, reader.ReadDouble("Double")); Assert.AreEqual(new double[] { 1 }, reader.ReadDoubleArray("DoubleArray")); Assert.AreEqual(1, reader.ReadDecimal("Decimal")); Assert.AreEqual(new decimal?[] { 1 }, reader.ReadDecimalArray("DecimalArray")); Assert.AreEqual(Date, reader.ReadTimestamp("Timestamp")); Assert.AreEqual(new DateTime?[] { Date }, reader.ReadTimestampArray("TimestampArray")); Assert.AreEqual("1", reader.ReadString("String")); Assert.AreEqual(new[] { "1" }, reader.ReadStringArray("StringArray")); Assert.AreEqual(Guid, reader.ReadGuid("Guid")); Assert.AreEqual(new Guid?[] { Guid }, reader.ReadGuidArray("GuidArray")); Assert.AreEqual(MyEnum.Bar, reader.ReadEnum <MyEnum>("Enum")); Assert.AreEqual(new[] { MyEnum.Bar }, reader.ReadEnumArray <MyEnum>("EnumArray")); var raw = reader.GetRawReader(); Assert.AreEqual(1, raw.ReadByte()); Assert.AreEqual(new byte[] { 1 }, raw.ReadByteArray()); Assert.AreEqual('1', raw.ReadChar()); Assert.AreEqual(new[] { '1' }, raw.ReadCharArray()); Assert.AreEqual(1, raw.ReadShort()); Assert.AreEqual(new short[] { 1 }, raw.ReadShortArray()); Assert.AreEqual(1, raw.ReadInt()); Assert.AreEqual(new[] { 1 }, raw.ReadIntArray()); Assert.AreEqual(1, raw.ReadLong()); Assert.AreEqual(new long[] { 1 }, raw.ReadLongArray()); Assert.AreEqual(true, raw.ReadBoolean()); Assert.AreEqual(new[] { true }, raw.ReadBooleanArray()); Assert.AreEqual(1, raw.ReadFloat()); Assert.AreEqual(new float[] { 1 }, raw.ReadFloatArray()); Assert.AreEqual(1, raw.ReadDouble()); Assert.AreEqual(new double[] { 1 }, raw.ReadDoubleArray()); Assert.AreEqual(1, raw.ReadDecimal()); Assert.AreEqual(new decimal?[] { 1 }, raw.ReadDecimalArray()); Assert.AreEqual(Date, raw.ReadTimestamp()); Assert.AreEqual(new DateTime?[] { Date }, raw.ReadTimestampArray()); Assert.AreEqual("1", raw.ReadString()); Assert.AreEqual(new[] { "1" }, raw.ReadStringArray()); Assert.AreEqual(Guid, raw.ReadGuid()); Assert.AreEqual(new Guid?[] { Guid }, raw.ReadGuidArray()); Assert.AreEqual(MyEnum.Bar, raw.ReadEnum <MyEnum>()); Assert.AreEqual(new[] { MyEnum.Bar }, raw.ReadEnumArray <MyEnum>()); }
IResourceData ReadResourceData(List <UserResourceType> userTypes, int size) { uint code = ReadUInt32(reader); switch ((ResourceTypeCode)code) { case ResourceTypeCode.Null: return(resourceDataCreator.CreateNull()); case ResourceTypeCode.String: return(resourceDataCreator.Create(reader.ReadString())); case ResourceTypeCode.Boolean: return(resourceDataCreator.Create(reader.ReadBoolean())); case ResourceTypeCode.Char: return(resourceDataCreator.Create((char)reader.ReadUInt16())); case ResourceTypeCode.Byte: return(resourceDataCreator.Create(reader.ReadByte())); case ResourceTypeCode.SByte: return(resourceDataCreator.Create(reader.ReadSByte())); case ResourceTypeCode.Int16: return(resourceDataCreator.Create(reader.ReadInt16())); case ResourceTypeCode.UInt16: return(resourceDataCreator.Create(reader.ReadUInt16())); case ResourceTypeCode.Int32: return(resourceDataCreator.Create(reader.ReadInt32())); case ResourceTypeCode.UInt32: return(resourceDataCreator.Create(reader.ReadUInt32())); case ResourceTypeCode.Int64: return(resourceDataCreator.Create(reader.ReadInt64())); case ResourceTypeCode.UInt64: return(resourceDataCreator.Create(reader.ReadUInt64())); case ResourceTypeCode.Single: return(resourceDataCreator.Create(reader.ReadSingle())); case ResourceTypeCode.Double: return(resourceDataCreator.Create(reader.ReadDouble())); case ResourceTypeCode.Decimal: return(resourceDataCreator.Create(reader.ReadDecimal())); case ResourceTypeCode.DateTime: return(resourceDataCreator.Create(new DateTime(reader.ReadInt64()))); case ResourceTypeCode.TimeSpan: return(resourceDataCreator.Create(new TimeSpan(reader.ReadInt64()))); case ResourceTypeCode.ByteArray: return(resourceDataCreator.Create(reader.ReadBytes(reader.ReadInt32()))); case ResourceTypeCode.Stream: return(resourceDataCreator.CreateStream(reader.ReadBytes(reader.ReadInt32()))); default: int userTypeIndex = (int)(code - (uint)ResourceTypeCode.UserTypes); if (userTypeIndex < 0 || userTypeIndex >= userTypes.Count) { throw new ResourceReaderException(string.Format("Invalid resource data code: {0}", code)); } return(resourceDataCreator.CreateSerialized(reader.ReadBytes(size))); } }
/// <summary> /// Reads encoded constant from the stream. /// </summary> /// <param name="reader">Stream binary reader.</param> /// <returns>Mostly integer, but also carries type info, so it is returned as object.</returns> public static object ReadEncodedConstant(this IBinaryReader reader) { ushort type = reader.ReadUshort(); if (type < (ushort)TypeLeafKind.LF_NUMERIC) { return(type); } switch ((TypeLeafKind)type) { case TypeLeafKind.LF_CHAR: return((sbyte)reader.ReadByte()); case TypeLeafKind.LF_SHORT: return(reader.ReadShort()); case TypeLeafKind.LF_USHORT: return(reader.ReadUshort()); case TypeLeafKind.LF_LONG: return(reader.ReadInt()); case TypeLeafKind.LF_ULONG: return(reader.ReadUint()); case TypeLeafKind.LF_QUADWORD: return(reader.ReadLong()); case TypeLeafKind.LF_UQUADWORD: return(reader.ReadUlong()); case TypeLeafKind.LF_REAL32: return(reader.ReadFloat()); case TypeLeafKind.LF_REAL64: return(reader.ReadDouble()); case TypeLeafKind.LF_VARSTRING: return(reader.ReadBString()); case TypeLeafKind.LF_DECIMAL: return(reader.ReadDecimal()); case TypeLeafKind.LF_DATE: return(new DateTime(reader.ReadLong())); } throw new NotImplementedException(); }
/// <summary> /// Reads a <see cref="Decimal"/> at offset <paramref name="offset"/> /// </summary> /// <param name="reader">this</param> /// <param name="offset">Offset</param> /// <returns>The <see cref="Decimal"/></returns> public static decimal ReadDecimalAt(this IBinaryReader reader, long offset) { reader.Position = offset; return(reader.ReadDecimal()); }
public void ReadBinary(IBinaryReader reader) { Assert.AreEqual(1, reader.ReadByte("Byte")); Assert.AreEqual(new byte[] {1}, reader.ReadByteArray("ByteArray")); Assert.AreEqual('1', reader.ReadChar("Char")); Assert.AreEqual(new[] {'1'}, reader.ReadCharArray("CharArray")); Assert.AreEqual(1, reader.ReadShort("Short")); Assert.AreEqual(new short[] {1}, reader.ReadShortArray("ShortArray")); Assert.AreEqual(1, reader.ReadInt("Int")); Assert.AreEqual(new[] {1}, reader.ReadIntArray("IntArray")); Assert.AreEqual(1, reader.ReadLong("Long")); Assert.AreEqual(new long[] {1}, reader.ReadLongArray("LongArray")); Assert.AreEqual(true, reader.ReadBoolean("Boolean")); Assert.AreEqual(new[] {true}, reader.ReadBooleanArray("BooleanArray")); Assert.AreEqual(1, reader.ReadFloat("Float")); Assert.AreEqual(new float[] {1}, reader.ReadFloatArray("FloatArray")); Assert.AreEqual(1, reader.ReadDouble("Double")); Assert.AreEqual(new double[] {1}, reader.ReadDoubleArray("DoubleArray")); Assert.AreEqual(1, reader.ReadDecimal("Decimal")); Assert.AreEqual(new decimal?[] {1}, reader.ReadDecimalArray("DecimalArray")); Assert.AreEqual(Date, reader.ReadTimestamp("Timestamp")); Assert.AreEqual(new DateTime?[] {Date}, reader.ReadTimestampArray("TimestampArray")); Assert.AreEqual("1", reader.ReadString("String")); Assert.AreEqual(new[] {"1"}, reader.ReadStringArray("StringArray")); Assert.AreEqual(Guid, reader.ReadGuid("Guid")); Assert.AreEqual(new Guid?[] {Guid}, reader.ReadGuidArray("GuidArray")); Assert.AreEqual(MyEnum.Bar, reader.ReadEnum<MyEnum>("Enum")); Assert.AreEqual(new[] {MyEnum.Bar}, reader.ReadEnumArray<MyEnum>("EnumArray")); var raw = reader.GetRawReader(); Assert.AreEqual(1, raw.ReadByte()); Assert.AreEqual(new byte[] { 1 }, raw.ReadByteArray()); Assert.AreEqual('1', raw.ReadChar()); Assert.AreEqual(new[] { '1' }, raw.ReadCharArray()); Assert.AreEqual(1, raw.ReadShort()); Assert.AreEqual(new short[] { 1 }, raw.ReadShortArray()); Assert.AreEqual(1, raw.ReadInt()); Assert.AreEqual(new[] { 1 }, raw.ReadIntArray()); Assert.AreEqual(1, raw.ReadLong()); Assert.AreEqual(new long[] { 1 }, raw.ReadLongArray()); Assert.AreEqual(true, raw.ReadBoolean()); Assert.AreEqual(new[] { true }, raw.ReadBooleanArray()); Assert.AreEqual(1, raw.ReadFloat()); Assert.AreEqual(new float[] { 1 }, raw.ReadFloatArray()); Assert.AreEqual(1, raw.ReadDouble()); Assert.AreEqual(new double[] { 1 }, raw.ReadDoubleArray()); Assert.AreEqual(1, raw.ReadDecimal()); Assert.AreEqual(new decimal?[] { 1 }, raw.ReadDecimalArray()); Assert.AreEqual(Date, raw.ReadTimestamp()); Assert.AreEqual(new DateTime?[] { Date }, raw.ReadTimestampArray()); Assert.AreEqual("1", raw.ReadString()); Assert.AreEqual(new[] { "1" }, raw.ReadStringArray()); Assert.AreEqual(Guid, raw.ReadGuid()); Assert.AreEqual(new Guid?[] { Guid }, raw.ReadGuidArray()); Assert.AreEqual(MyEnum.Bar, raw.ReadEnum<MyEnum>()); Assert.AreEqual(new[] { MyEnum.Bar }, raw.ReadEnumArray<MyEnum>()); }
/** <inheritDoc /> */ public void ReadBinary(IBinaryReader reader) { Byte = reader.ReadByte("Byte"); ByteArray = reader.ReadByteArray("ByteArray"); Char = reader.ReadChar("Char"); CharArray = reader.ReadCharArray("CharArray"); Short = reader.ReadShort("Short"); ShortArray = reader.ReadShortArray("ShortArray"); Int = reader.ReadInt("Int"); IntArray = reader.ReadIntArray("IntArray"); Long = reader.ReadLong("Long"); LongArray = reader.ReadLongArray("LongArray"); Boolean = reader.ReadBoolean("Boolean"); BooleanArray = reader.ReadBooleanArray("BooleanArray"); Float = reader.ReadFloat("Float"); FloatArray = reader.ReadFloatArray("FloatArray"); Double = reader.ReadDouble("Double"); DoubleArray = reader.ReadDoubleArray("DoubleArray"); Decimal = reader.ReadDecimal("Decimal"); DecimalArray = reader.ReadDecimalArray("DecimalArray"); Date = reader.ReadTimestamp("Date"); DateArray = reader.ReadTimestampArray("DateArray"); String = reader.ReadString("String"); StringArray = reader.ReadStringArray("StringArray"); Guid = reader.ReadObject<Guid>("Guid"); GuidArray = reader.ReadGuidArray("GuidArray"); }
private IResourceData ReadResourceData(List <UserResourceType> userTypes, int size) { var code = ReadUInt32(reader); switch ((ResourceTypeCode)code) { case ResourceTypeCode.Null: return(resourceDataCreator.CreateNull()); case ResourceTypeCode.String: return(resourceDataCreator.Create(reader.ReadString())); case ResourceTypeCode.Boolean: return(resourceDataCreator.Create(reader.ReadBoolean())); case ResourceTypeCode.Char: return(resourceDataCreator.Create((char)reader.ReadUInt16())); case ResourceTypeCode.Byte: return(resourceDataCreator.Create(reader.ReadByte())); case ResourceTypeCode.SByte: return(resourceDataCreator.Create(reader.ReadSByte())); case ResourceTypeCode.Int16: return(resourceDataCreator.Create(reader.ReadInt16())); case ResourceTypeCode.UInt16: return(resourceDataCreator.Create(reader.ReadUInt16())); case ResourceTypeCode.Int32: return(resourceDataCreator.Create(reader.ReadInt32())); case ResourceTypeCode.UInt32: return(resourceDataCreator.Create(reader.ReadUInt32())); case ResourceTypeCode.Int64: return(resourceDataCreator.Create(reader.ReadInt64())); case ResourceTypeCode.UInt64: return(resourceDataCreator.Create(reader.ReadUInt64())); case ResourceTypeCode.Single: return(resourceDataCreator.Create(reader.ReadSingle())); case ResourceTypeCode.Double: return(resourceDataCreator.Create(reader.ReadDouble())); case ResourceTypeCode.Decimal: return(resourceDataCreator.Create(reader.ReadDecimal())); case ResourceTypeCode.DateTime: return(resourceDataCreator.Create(DateTime.FromBinary(reader.ReadInt64()))); case ResourceTypeCode.TimeSpan: return(resourceDataCreator.Create(new TimeSpan(reader.ReadInt64()))); case ResourceTypeCode.ByteArray: return(resourceDataCreator.Create(reader.ReadBytes(reader.ReadInt32()))); case ResourceTypeCode.Stream: return(resourceDataCreator.CreateStream(reader.ReadBytes(reader.ReadInt32()))); default: var userTypeIndex = (int)(code - (uint)ResourceTypeCode.UserTypes); if (userTypeIndex < 0 || userTypeIndex >= userTypes.Count) { throw new ResourceReaderException(string.Format("Invalid resource data code: {0}", code)); } var userType = userTypes[userTypeIndex]; var serializedData = reader.ReadBytes(size); if (createResourceDataDelegate != null) { var res = createResourceDataDelegate(resourceDataCreator, userType, serializedData); if (res != null) { return(res); } } return(resourceDataCreator.CreateSerialized(serializedData, userType)); } }