コード例 #1
0
        static object[] ReadObjectArray(PivotDataStateBinaryReader rdr)
        {
            var arrLen = rdr.Read7BitEncodedLong();
            var arr    = new object[arrLen];

            for (ulong i = 0; i < arrLen; i++)
            {
                arr[i] = ReadObject(rdr);
            }
            return(arr);
        }
コード例 #2
0
        static uint[][] ReadValueKeys(PivotDataStateBinaryReader rdr, uint dimCount)
        {
            var arrLen = rdr.Read7BitEncodedLong();
            var res    = new uint[arrLen][];

            for (ulong i = 0; i < arrLen; i++)
            {
                var entry = new uint[dimCount];
                for (int j = 0; j < dimCount; j++)
                {
                    entry[j] = rdr.Read7BitEncodedInt();
                }
                res[i] = entry;
            }
            return(res);
        }
コード例 #3
0
        static object ReadObject(PivotDataStateBinaryReader rdr)
        {
            var typeCode = rdr.ReadByte();

            if (typeCode < TypeCodeReaders.Length)
            {
                return(TypeCodeReaders[typeCode](rdr));
            }
            switch (typeCode)
            {
            case (byte)ExtraTypeCode.ObjectArray:
                return(ReadObjectArray(rdr));

            case (byte)ExtraTypeCode.KeyEmpty:
                return(Key.Empty);
            }
            throw new InvalidDataException(String.Format("Unknown type code: {0}", typeCode));
        }
コード例 #4
0
        /// <summary>
        /// Deserializes <see cref="PivotDataState"/> from binary data contained by the specified stream
        /// </summary>
        /// <param name="stream">The <see cref="Stream"/> that contains serialized <see cref="PivotDataState"/> data</param>
        /// <returns>deserialized <see cref="PivotDataState"/> instance</returns>
        /// <remarks>
        /// This method is not supported in .NET Standards (.NET Core) PivotData build (use Json.NET or protobuf-net instead).
        /// </remarks>
        public static PivotDataState Deserialize(Stream stream)
        {
            using (var rdr = new PivotDataStateBinaryReader(stream)) {
                var typeName = rdr.ReadString();
                if (typeName != typeof(PivotDataState).FullName)
                {
                    throw new InvalidDataException();
                }
                // read version (reserved for future)
                var majorVer = rdr.ReadInt32();
                var minorVer = rdr.ReadInt32();

                var propsCount   = rdr.ReadUInt16();
                var pvtDataState = new PivotDataState(0, null, null, null);
                for (short propIdx = 0; propIdx < propsCount; propIdx++)
                {
                    var propName = rdr.ReadString();
                    switch (propName)
                    {
                    case "KeyValues":
                        var keyValues = ReadObject(rdr);
                        if (keyValues is object[])
                        {
                            pvtDataState.KeyValues = (object[])keyValues;
                        }
                        else
                        {
                            throw new InvalidDataException("Invalid value type: KeyValues");
                        }
                        break;

                    case "Values":
                        var values = ReadObject(rdr);
                        if (values is object[])
                        {
                            pvtDataState.Values = (object[])values;
                        }
                        else
                        {
                            throw new InvalidDataException("Invalid value type: Values");
                        }
                        break;

                    case "DimCount":
                        pvtDataState.DimCount = rdr.ReadUInt32();
                        break;

                    case "ValueKeys":
                        if (pvtDataState.DimCount == 0)
                        {
                            throw new InvalidDataException("Missed DimCount property");
                        }
                        pvtDataState.ValueKeys = ReadValueKeys(rdr, pvtDataState.DimCount);
                        break;

                    default:
                        throw new InvalidDataException(String.Format("Unknown property: {0}", propName));
                    }
                }

                return(pvtDataState);
            }
        }