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); }
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); } } }
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); } } }
public static int GetEncodeSize(DescribedType value) { if (value == null) { return(1); } return(1 + AmqpEncoding.GetObjectEncodeSize(value.Descriptor) + AmqpEncoding.GetObjectEncodeSize(value.Value)); }
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); }
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)); }
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); }