Ejemplo n.º 1
0
 /** <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");
 }
Ejemplo n.º 2
0
            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>());
            }
Ejemplo n.º 3
0
        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)));
            }
        }
Ejemplo n.º 4
0
        /// <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();
        }
Ejemplo n.º 5
0
 /// <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());
 }
Ejemplo n.º 6
0
            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>());
            }
Ejemplo n.º 7
0
 /** <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));
            }
        }