// Deserialization public Int32 Deserialize() { // Read info about storage format Int32StorageFormats format = (Int32StorageFormats)SerializerStorage.ReadStorageFormatId(Int32StorageBase.FormatIdSizeInBits); // Is it default value if (format == Int32StorageFormats.DefaultValue) { return(0); } if (format == Int32StorageFormats.ValueInConfig) { ValueInConfig valInConfig = new ValueInConfig(); valInConfig.FormatConfig.Bits = SerializerStorage.ReadStorageFormatData(ValueInConfig.UsedConfigBitsForValue); return(valInConfig.Value); } // Value stored in PackedData ValueInDataStream valInDataStream = new ValueInDataStream(); valInDataStream.FormatConfig.Bits = SerializerStorage.ReadStorageFormatData(ValueInDataStream.UsedConfigBitsForCase); byte[] encodedValue = SerializerStorage.ReadPackedData(valInDataStream.PackedDataSize); // Return decoded value return(BitToolkit.ConvertByteArrayToInt32(encodedValue)); }
// Deserialization of Int32 public static UInt32 DeserializeUInt32(byte[] serializedData) { // 1 or 2 bits for config (lsb) // x1 - stored in this byte (on rest 7 bits) // 00 - has default value 0 // 10 - stored in next few bytes - then next 2 bits says on how many bytes the value has been stored // Read config byte byte config = serializedData[0]; // Is it value stored in config byte? if ((config & 0x01) > 0) { return((UInt32)((config >> 1) + 1)); } // Rest config cases byte configCase = (byte)(config & 0x03); // Mask 2 lsb bits switch (configCase) { case 2: // 10 - stored in next few bytes - then next 2 bits says on how many bytes the value has been stored return((UInt32)BitToolkit.ConvertByteArrayToInt32(serializedData, 1)); // case 00: default: return(0); } }