Beispiel #1
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));
        }
Beispiel #2
0
 // Constructor that requires config case value
 public DecimalStorageBase(DecimalStorageFormats confCase, byte usedConfigBits) : base((byte)confCase, FormatIdSizeInBits, usedConfigBits)
 {
 }