Esempio n. 1
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)));
            }
        }