Esempio n. 1
0
        // Deserialization
        public Int64 Deserialize()
        {
            // Read info about storage format
            Int64StorageFormats format = (Int64StorageFormats)SerializerStorage.ReadStorageFormatId(Int64StorageBase.FormatIdSizeInBits);

            // Is it default value
            if (format == Int64StorageFormats.DefaultValue)
            {
                return(0);
            }

            if (format == Int64StorageFormats.ValueInConfig)
            {
                ValueInConfig valInConfig = new ValueInConfig();
                valInConfig.FormatConfig.Bits = SerializerStorage.ReadStorageFormatData(ValueInConfig.UsedConfigBitsForValue);
                return((Int64)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.ConvertByteArrayToInt64(encodedValue));
        }
Esempio n. 2
0
        // Deserialization
        public Decimal Deserialize()
        {
            // Read info about storage format
            DecimalStorageFormats format = (DecimalStorageFormats)SerializerStorage.ReadStorageFormatId(DecimalStorageBase.FormatIdSizeInBits);

            // Is it default value
            if (format == DecimalStorageFormats.DefaultValue)
            {
                return(Decimal.Zero);
            }

            // Size of data in buffer
            PositiveValueInDataStream positiveValueInDataStream = new PositiveValueInDataStream();

            positiveValueInDataStream.FormatConfig.Bits = SerializerStorage.ReadStorageFormatData(PositiveValueInDataStream.UsedConfigBitsForCase);
            byte packedDataSize = (byte)positiveValueInDataStream.PackedDataSize;

            // Data
            byte[] packedData = SerializerStorage.ReadPackedData(packedDataSize);

            // Buffer
            int[] decimalBuffer = new int[4];

            int intPos    = 0;
            int byteShift = 0;

            // Restore value
            for (int pos = 0; pos < packedDataSize; pos++)
            {
                decimalBuffer[intPos] |= packedData[pos] << byteShift;

                byteShift += 8;
                byteShift %= 8;

                if (byteShift == 0)
                {
                    intPos++;
                }
            }

            // Is it NegativeValueInDataStream) storage case
            if (format == DecimalStorageFormats.NegativeValueInDataStream)
            {
                return(new Decimal(decimalBuffer) * (-1));
            }

            // Is it PositiveValueInDataStream storage case
            // DecimalStorageFormats.PositiveValueInDataStream
            return(new Decimal(decimalBuffer));
        }
Esempio n. 3
0
        // Deserialization
        public Guid Deserialize()
        {
            // Read info about storage format
            GuidStorageFormats format = (GuidStorageFormats)SerializerStorage.ReadStorageFormatId(GuidStorageBase.FormatIdSizeInBits);

            // Is it default value
            if (format == GuidStorageFormats.DefaultValue)
            {
                return(Guid.Empty);
            }

            // Deserialize full data
            byte[] guidBytes = SerializerStorage.ReadPackedData(16); // 16 bytes
            return(BitToolkit.ConvertByteArrayToGuid(guidBytes));
        }
Esempio n. 4
0
        // Deserialization
        public SByte Deserialize()
        {
            // Read info about storage format
            ByteStorageFormats format = (ByteStorageFormats)SerializerStorage.ReadStorageFormatId(ByteStorageBase.FormatIdSizeInBits);

            // Is it default value
            if (format == ByteStorageFormats.DefaultValue)
            {
                return(0);
            }

            // Value stored in PackedData
            byte[] encodedValue = SerializerStorage.ReadPackedData(1);

            // Return decoded value
            return((SByte)encodedValue[0]);
        }
Esempio n. 5
0
        // Deserialization
        public string Deserialize()
        {
            // Read info about storage format
            StringStorageFormats format = (StringStorageFormats)SerializerStorage.ReadStorageFormatId(StringStorageBase.FormatIdSizeInBits);

            // Case: null string
            if (format == StringStorageFormats.NullString)
            {
                return(null);
            }

            // Case: empty string
            if (format == StringStorageFormats.EmptyString)
            {
                return(string.Empty);
            }

            // Int32 serializer
            Int32Serializer int32Serializer = new Int32Serializer(SerializerStorage);

            // If caching has been activated
            if (SerializerStorage.UseValCaching)
            {
                // Case: cached string
                if (format == StringStorageFormats.CachedString)
                {
                    // Read object Id
                    this.ObjectId = int32Serializer.Deserialize();

                    // Take value from cache (objects dictionary)
                    return(ObjectCache.GetObjectValueForValueTypeField <String>(this));
                }

                // Case: new string
                if (format == StringStorageFormats.NormalString)
                {
                    this.ObjectId = int32Serializer.Deserialize();                                      // Read object Id
                    int    encodedStringLength = int32Serializer.Deserialize();                         // Read encoded string length
                    byte[] encodedString       = SerializerStorage.ReadPackedData(encodedStringLength); // Read encoded data

                    // Decode string
                    string result = Encoding.UTF8.GetString(encodedString, 0, encodedString.Length);

                    // Register new string in cache
                    ObjectCache.RegisterValue(result, this);

                    // Return result
                    return(result);
                }
            }
            else
            {
                // Value without caching (so without Id)
                int    encodedStringLength = int32Serializer.Deserialize();                         // Read encoded string length
                byte[] encodedString       = SerializerStorage.ReadPackedData(encodedStringLength); // Read encoded data

                // Decode string
                return(Encoding.UTF8.GetString(encodedString, 0, encodedString.Length));
            }

            // Default result
            return(null);
        }