Esempio n. 1
0
        static T[] Decode <T>(ByteBuffer buffer, int size, int count, FormatCode formatCode)
        {
            T[]          array      = new T[count];
            EncodingBase encoding   = AmqpEncoding.GetEncoding(formatCode);
            object       descriptor = null;

            if (formatCode == FormatCode.Described)
            {
                descriptor = AmqpEncoding.DecodeObject(buffer);
                formatCode = AmqpEncoding.ReadFormatCode(buffer);
            }

            for (int i = 0; i < count; ++i)
            {
                object value = encoding.DecodeObject(buffer, formatCode);
                if (descriptor != null)
                {
                    value = new DescribedType(descriptor, value);
                }

                array[i] = (T)value;
            }

            return(array);
        }
Esempio n. 2
0
        static void Encode(Array value, int width, int encodeSize, ByteBuffer buffer)
        {
            encodeSize -= (FixedWidth.FormatCode + width);
            if (width == FixedWidth.UByte)
            {
                AmqpBitConverter.WriteUByte(buffer, (byte)encodeSize);
                AmqpBitConverter.WriteUByte(buffer, (byte)value.Length);
            }
            else
            {
                AmqpBitConverter.WriteUInt(buffer, (uint)encodeSize);
                AmqpBitConverter.WriteUInt(buffer, (uint)value.Length);
            }

            if (value.Length > 0)
            {
                object       firstItem = value.GetValue(0);
                EncodingBase encoding  = AmqpEncoding.GetEncoding(firstItem);
                AmqpBitConverter.WriteUByte(buffer, (byte)encoding.FormatCode);
                if (encoding.FormatCode == FormatCode.Described)
                {
                    DescribedType describedValue = (DescribedType)firstItem;
                    AmqpEncoding.EncodeObject(describedValue.Descriptor, buffer);
                    AmqpBitConverter.WriteUByte(buffer, (byte)AmqpEncoding.GetEncoding(describedValue.Value).FormatCode);
                }

                foreach (object item in value)
                {
                    encoding.EncodeObject(item, true, buffer);
                }
            }
        }
Esempio n. 3
0
        static int GetValueSize(Array value, Type type)
        {
            if (value.Length == 0)
            {
                return(0);
            }

            if (type == null)
            {
                type = value.GetValue(0).GetType();
            }

            EncodingBase encoding  = AmqpEncoding.GetEncoding(type);
            int          valueSize = 0;

            foreach (object item in value)
            {
                bool arrayEncoding = true;
                if (encoding.FormatCode == FormatCode.Described && valueSize == 0)
                {
                    arrayEncoding = false;
                }

                valueSize += encoding.GetObjectEncodeSize(item, arrayEncoding);
            }

            return(valueSize);
        }
Esempio n. 4
0
 private static void Encode(Array value, int width, int encodeSize, ByteBuffer buffer)
 {
     encodeSize = encodeSize - (1 + width);
     if (width != 1)
     {
         AmqpBitConverter.WriteUInt(buffer, (uint)encodeSize);
         AmqpBitConverter.WriteUInt(buffer, (uint)value.Length);
     }
     else
     {
         AmqpBitConverter.WriteUByte(buffer, (byte)encodeSize);
         AmqpBitConverter.WriteUByte(buffer, (byte)value.Length);
     }
     if (value.Length > 0)
     {
         object       obj      = value.GetValue(0);
         EncodingBase encoding = AmqpEncoding.GetEncoding(obj);
         AmqpBitConverter.WriteUByte(buffer, encoding.FormatCode);
         if (encoding.FormatCode == 0)
         {
             DescribedType describedType = (DescribedType)obj;
             AmqpEncoding.EncodeObject(describedType.Descriptor, buffer);
             AmqpBitConverter.WriteUByte(buffer, AmqpEncoding.GetEncoding(describedType.Value).FormatCode);
         }
         foreach (object obj1 in value)
         {
             encoding.EncodeObject(obj1, true, buffer);
         }
     }
 }
Esempio n. 5
0
        public override int GetObjectEncodeSize(object value, bool arrayEncoding)
        {
            if (!arrayEncoding)
            {
                return(DescribedEncoding.GetEncodeSize((DescribedType)value));
            }
            object obj = ((DescribedType)value).Value;

            return(AmqpEncoding.GetEncoding(obj).GetObjectEncodeSize(obj, true));
        }
Esempio n. 6
0
        public override void EncodeObject(object value, bool arrayEncoding, ByteBuffer buffer)
        {
            if (!arrayEncoding)
            {
                DescribedEncoding.Encode((DescribedType)value, buffer);
                return;
            }
            object obj = ((DescribedType)value).Value;

            AmqpEncoding.GetEncoding(obj).EncodeObject(obj, true, buffer);
        }
Esempio n. 7
0
        public static int GetObjectEncodeSize(object value)
        {
            if (value == null)
            {
                return(1);
            }
            IAmqpSerializable amqpSerializable = value as IAmqpSerializable;

            if (amqpSerializable != null)
            {
                return(amqpSerializable.EncodeSize);
            }
            return(AmqpEncoding.GetEncoding(value).GetObjectEncodeSize(value, false));
        }
Esempio n. 8
0
        public static void EncodeObject(object value, ByteBuffer buffer)
        {
            if (value == null)
            {
                AmqpEncoding.EncodeNull(buffer);
                return;
            }
            IAmqpSerializable amqpSerializable = value as IAmqpSerializable;

            if (amqpSerializable != null)
            {
                amqpSerializable.Encode(buffer);
                return;
            }
            AmqpEncoding.GetEncoding(value).EncodeObject(value, false, buffer);
        }
Esempio n. 9
0
        private static T[] Decode <T>(ByteBuffer buffer, int size, int count, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
        {
            T[]          tArray   = new T[count];
            EncodingBase encoding = AmqpEncoding.GetEncoding(formatCode);
            object       obj      = null;

            if (formatCode == 0)
            {
                obj        = AmqpEncoding.DecodeObject(buffer);
                formatCode = AmqpEncoding.ReadFormatCode(buffer);
            }
            for (int i = 0; i < count; i++)
            {
                object describedType = encoding.DecodeObject(buffer, formatCode);
                if (obj != null)
                {
                    describedType = new DescribedType(obj, describedType);
                }
                tArray[i] = (T)describedType;
            }
            return(tArray);
        }
Esempio n. 10
0
        private static int GetValueSize(Array value, Type type)
        {
            if (value.Length == 0)
            {
                return(0);
            }
            if (type == null)
            {
                type = value.GetValue(0).GetType();
            }
            EncodingBase encoding         = AmqpEncoding.GetEncoding(type);
            int          objectEncodeSize = 0;

            foreach (object obj in value)
            {
                bool flag = true;
                if (encoding.FormatCode == 0 && objectEncodeSize == 0)
                {
                    flag = false;
                }
                objectEncodeSize = objectEncodeSize + encoding.GetObjectEncodeSize(obj, flag);
            }
            return(objectEncodeSize);
        }