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); } } }
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); }
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 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)); }
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); }
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)); }
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); }
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); }
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); }