예제 #1
0
        static decimal DecodeValue(ByteBuffer buffer, FormatCode formatCode)
        {
            decimal value = 0;

            switch (formatCode)
            {
            case FormatCode.Decimal32:
                value = DecimalEncoding.DecodeDecimal32(buffer);
                break;

            case FormatCode.Decimal64:
                value = DecimalEncoding.DecodeDecimal64(buffer);
                break;

            case FormatCode.Decimal128:
                value = DecimalEncoding.DecodeDecimal128(buffer);
                break;

            default:
                throw AmqpEncoding.GetInvalidFormatCodeException(formatCode, buffer.Offset);
            }
            ;

            return(value);
        }
예제 #2
0
        private static decimal DecodeDecimal64(ByteBuffer buffer)
        {
            byte[] numArray = new byte[8];
            AmqpBitConverter.ReadBytes(buffer, numArray, 0, (int)numArray.Length);
            int num  = 1;
            int num1 = 0;

            num = ((numArray[0] & 128) != 0 ? -1 : 1);
            if ((numArray[0] & 96) != 96)
            {
                num1        = (numArray[0] & 127) << 3 | (numArray[1] & 224) >> 5;
                numArray[0] = 0;
                numArray[1] = (byte)(numArray[1] & 31);
            }
            else if ((numArray[0] & 120) == 0)
            {
                num1        = (numArray[0] & 31) << 8 | (numArray[1] & 248) >> 3;
                numArray[0] = 0;
                numArray[1] = (byte)(numArray[1] & 7);
                numArray[1] = (byte)(numArray[1] | 32);
            }
            int num2 = (int)AmqpBitConverter.ReadUInt(numArray, 0, 4);
            int num3 = (int)AmqpBitConverter.ReadUInt(numArray, 4, 4);

            return(DecimalEncoding.CreateDecimal(num3, num2, 0, num, num1 - 398));
        }
예제 #3
0
 public override void EncodeObject(object value, bool arrayEncoding, ByteBuffer buffer)
 {
     if (arrayEncoding)
     {
         DecimalEncoding.EncodeValue((decimal)value, buffer);
         return;
     }
     DecimalEncoding.Encode(new decimal?((decimal)value), buffer);
 }
예제 #4
0
        public static decimal?Decode(ByteBuffer buffer, FormatCode formatCode)
        {
            if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null)
            {
                return(null);
            }

            return(DecimalEncoding.DecodeValue(buffer, formatCode));
        }
예제 #5
0
 public static void Encode(decimal?value, ByteBuffer buffer)
 {
     if (!value.HasValue)
     {
         AmqpEncoding.EncodeNull(buffer);
         return;
     }
     AmqpBitConverter.WriteUByte(buffer, 148);
     DecimalEncoding.EncodeValue(value.Value, buffer);
 }
예제 #6
0
 public override void EncodeObject(object value, bool arrayEncoding, ByteBuffer buffer)
 {
     if (arrayEncoding)
     {
         DecimalEncoding.EncodeValue((decimal)value, buffer);
     }
     else
     {
         DecimalEncoding.Encode((decimal)value, buffer);
     }
 }
예제 #7
0
 public static void Encode(decimal?value, ByteBuffer buffer)
 {
     if (value.HasValue)
     {
         AmqpBitConverter.WriteUByte(buffer, (byte)FormatCode.Decimal128);
         DecimalEncoding.EncodeValue(value.Value, buffer);
     }
     else
     {
         AmqpEncoding.EncodeNull(buffer);
     }
 }
예제 #8
0
 public static decimal?Decode(ByteBuffer buffer, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
 {
     if (formatCode == 0)
     {
         Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode1 = AmqpEncoding.ReadFormatCode(buffer);
         formatCode = formatCode1;
         if (formatCode1 == 64)
         {
             return(null);
         }
     }
     return(new decimal?(DecimalEncoding.DecodeValue(buffer, formatCode)));
 }
예제 #9
0
        private static decimal DecodeValue(ByteBuffer buffer, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
        {
            decimal num  = new decimal(0);
            byte    num1 = formatCode;

            if (num1 == 116)
            {
                num = DecimalEncoding.DecodeDecimal32(buffer);
            }
            else if (num1 == 132)
            {
                num = DecimalEncoding.DecodeDecimal64(buffer);
            }
            else
            {
                if (num1 != 148)
                {
                    throw AmqpEncoding.GetEncodingException(SRAmqp.AmqpInvalidFormatCode(formatCode, buffer.Offset));
                }
                num = DecimalEncoding.DecodeDecimal128(buffer);
            }
            return(num);
        }
예제 #10
0
        private static decimal DecodeDecimal128(ByteBuffer buffer)
        {
            byte[] numArray = new byte[16];
            AmqpBitConverter.ReadBytes(buffer, numArray, 0, (int)numArray.Length);
            int num  = 1;
            int num1 = 0;

            num = ((numArray[0] & 128) != 0 ? -1 : 1);
            if ((numArray[0] & 96) != 96)
            {
                num1        = (numArray[0] & 127) << 7 | (numArray[1] & 254) >> 1;
                numArray[0] = 0;
                numArray[1] = (byte)(numArray[1] & 1);
            }
            else if ((numArray[0] & 120) == 0)
            {
                return(new decimal(0));
            }
            int num2 = (int)AmqpBitConverter.ReadUInt(numArray, 4, 4);
            int num3 = (int)AmqpBitConverter.ReadUInt(numArray, 8, 4);
            int num4 = (int)AmqpBitConverter.ReadUInt(numArray, 12, 4);

            return(DecimalEncoding.CreateDecimal(num4, num3, num2, num, num1 - 6176));
        }
예제 #11
0
 public override object DecodeObject(ByteBuffer buffer, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
 {
     return(DecimalEncoding.Decode(buffer, formatCode));
 }
예제 #12
0
        static AmqpEncoding()
        {
            AmqpEncoding.booleanEncoding       = new BooleanEncoding();
            AmqpEncoding.ubyteEncoding         = new UByteEncoding();
            AmqpEncoding.ushortEncoding        = new UShortEncoding();
            AmqpEncoding.uintEncoding          = new UIntEncoding();
            AmqpEncoding.ulongEncoding         = new ULongEncoding();
            AmqpEncoding.byteEncoding          = new ByteEncoding();
            AmqpEncoding.shortEncoding         = new ShortEncoding();
            AmqpEncoding.intEncoding           = new IntEncoding();
            AmqpEncoding.longEncoding          = new LongEncoding();
            AmqpEncoding.floatEncoding         = new FloatEncoding();
            AmqpEncoding.doubleEncoding        = new DoubleEncoding();
            AmqpEncoding.decimal128Encoding    = new DecimalEncoding();
            AmqpEncoding.charEncoding          = new CharEncoding();
            AmqpEncoding.timeStampEncoding     = new TimeStampEncoding();
            AmqpEncoding.uuidEncoding          = new UuidEncoding();
            AmqpEncoding.binaryEncoding        = new BinaryEncoding();
            AmqpEncoding.symbolEncoding        = new SymbolEncoding();
            AmqpEncoding.stringEncoding        = new StringEncoding();
            AmqpEncoding.listEncoding          = new ListEncoding();
            AmqpEncoding.mapEncoding           = new MapEncoding();
            AmqpEncoding.arrayEncoding         = new ArrayEncoding();
            AmqpEncoding.describedTypeEncoding = new DescribedEncoding();
            Dictionary <Type, EncodingBase> types = new Dictionary <Type, EncodingBase>()
            {
                { typeof(bool), AmqpEncoding.booleanEncoding },
                { typeof(byte), AmqpEncoding.ubyteEncoding },
                { typeof(ushort), AmqpEncoding.ushortEncoding },
                { typeof(uint), AmqpEncoding.uintEncoding },
                { typeof(ulong), AmqpEncoding.ulongEncoding },
                { typeof(sbyte), AmqpEncoding.byteEncoding },
                { typeof(short), AmqpEncoding.shortEncoding },
                { typeof(int), AmqpEncoding.intEncoding },
                { typeof(long), AmqpEncoding.longEncoding },
                { typeof(float), AmqpEncoding.floatEncoding },
                { typeof(double), AmqpEncoding.doubleEncoding },
                { typeof(decimal), AmqpEncoding.decimal128Encoding },
                { typeof(char), AmqpEncoding.charEncoding },
                { typeof(DateTime), AmqpEncoding.timeStampEncoding },
                { typeof(Guid), AmqpEncoding.uuidEncoding },
                { typeof(ArraySegment <byte>), AmqpEncoding.binaryEncoding },
                { typeof(AmqpSymbol), AmqpEncoding.symbolEncoding },
                { typeof(string), AmqpEncoding.stringEncoding },
                { typeof(AmqpMap), AmqpEncoding.mapEncoding }
            };

            AmqpEncoding.encodingsByType = types;
            Dictionary <FormatCode, EncodingBase> formatCodes = new Dictionary <FormatCode, EncodingBase>()
            {
                { 66, AmqpEncoding.booleanEncoding },
                { 65, AmqpEncoding.booleanEncoding },
                { 86, AmqpEncoding.booleanEncoding },
                { 80, AmqpEncoding.ubyteEncoding },
                { 96, AmqpEncoding.ushortEncoding },
                { 112, AmqpEncoding.uintEncoding },
                { 82, AmqpEncoding.uintEncoding },
                { 67, AmqpEncoding.uintEncoding },
                { 128, AmqpEncoding.ulongEncoding },
                { 83, AmqpEncoding.ulongEncoding },
                { 68, AmqpEncoding.ulongEncoding },
                { 81, AmqpEncoding.byteEncoding },
                { 97, AmqpEncoding.shortEncoding },
                { 113, AmqpEncoding.intEncoding },
                { 84, AmqpEncoding.intEncoding },
                { 129, AmqpEncoding.longEncoding },
                { 85, AmqpEncoding.longEncoding },
                { 114, AmqpEncoding.floatEncoding },
                { 130, AmqpEncoding.doubleEncoding },
                { 148, AmqpEncoding.decimal128Encoding },
                { 115, AmqpEncoding.charEncoding },
                { 131, AmqpEncoding.timeStampEncoding },
                { 152, AmqpEncoding.uuidEncoding },
                { 160, AmqpEncoding.binaryEncoding },
                { 176, AmqpEncoding.binaryEncoding },
                { 163, AmqpEncoding.symbolEncoding },
                { 179, AmqpEncoding.symbolEncoding },
                { 161, AmqpEncoding.stringEncoding },
                { 177, AmqpEncoding.stringEncoding },
                { 69, AmqpEncoding.listEncoding },
                { 192, AmqpEncoding.listEncoding },
                { 208, AmqpEncoding.listEncoding },
                { 193, AmqpEncoding.mapEncoding },
                { 209, AmqpEncoding.mapEncoding },
                { 224, AmqpEncoding.arrayEncoding },
                { 240, AmqpEncoding.arrayEncoding },
                { 0, AmqpEncoding.describedTypeEncoding }
            };

            AmqpEncoding.encodingsByCode = formatCodes;
        }
예제 #13
0
 public override object DecodeObject(ByteBuffer buffer, FormatCode formatCode)
 {
     return(DecimalEncoding.Decode(buffer, formatCode));
 }