示例#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);
        }
示例#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);
                }
            }
        }
示例#3
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);
         }
     }
 }
示例#4
0
 public static int GetEncodeSize(DescribedType value)
 {
     if (value == null)
     {
         return(1);
     }
     return(1 + AmqpEncoding.GetObjectEncodeSize(value.Descriptor) + AmqpEncoding.GetObjectEncodeSize(value.Value));
 }
示例#5
0
 public static void Encode(DescribedType value, ByteBuffer buffer)
 {
     if (value.Value == null)
     {
         AmqpEncoding.EncodeNull(buffer);
         return;
     }
     AmqpBitConverter.WriteUByte(buffer, 0);
     AmqpEncoding.EncodeObject(value.Descriptor, buffer);
     AmqpEncoding.EncodeObject(value.Value, buffer);
 }
示例#6
0
 public override object ReadObject(ByteBuffer buffer)
 {
     Microsoft.ServiceBus.Messaging.Amqp.Encoding.DescribedType describedType = DescribedEncoding.Decode(buffer);
     if (describedType == null)
     {
         return(null);
     }
     if (!this.symbol.Equals(describedType.Descriptor))
     {
         throw new SerializationException(describedType.Descriptor.ToString());
     }
     return(this.setter((TAs)describedType.Value));
 }
示例#7
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);
        }