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 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); }
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 long?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); } } int offset = buffer.Offset; Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] formatCodeArray = new Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] { 129, 85 }; EncodingBase.VerifyFormatCode(formatCode, offset, formatCodeArray); return(new long?((formatCode == 85 ? (long)AmqpBitConverter.ReadByte(buffer) : AmqpBitConverter.ReadLong(buffer)))); }
public static int GetObjectEncodeSize(object value) { if (value == null) { return(FixedWidth.NullEncoded); } IAmqpSerializable serializable = value as IAmqpSerializable; if (serializable != null) { return(serializable.EncodeSize); } EncodingBase encoding = GetEncoding(value); return(encoding.GetObjectEncodeSize(value, false)); }
public static void EncodeObject(object value, ByteBuffer buffer) { if (value == null) { EncodeNull(buffer); return; } IAmqpSerializable serializable = value as IAmqpSerializable; if (serializable != null) { serializable.Encode(buffer); return; } EncodingBase encoding = GetEncoding(value);; encoding.EncodeObject(value, false, buffer); }
public static bool?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); } } int offset = buffer.Offset; Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] formatCodeArray = new Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] { 86, 66, 65 }; EncodingBase.VerifyFormatCode(formatCode, offset, formatCodeArray); if (formatCode == 86) { return(new bool?(AmqpBitConverter.ReadUByte(buffer) != 0)); } return(new bool?((formatCode == 65 ? true : false))); }
public static uint?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); } } int offset = buffer.Offset; Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] formatCodeArray = new Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] { 112, 82, 67 }; EncodingBase.VerifyFormatCode(formatCode, offset, formatCodeArray); if (formatCode == 67) { return(new uint?(0)); } return(new uint?((formatCode == 82 ? (uint)AmqpBitConverter.ReadUByte(buffer) : AmqpBitConverter.ReadUInt(buffer)))); }
public static EncodingBase GetEncoding(Type type) { EncodingBase encodingBase = null; if (AmqpEncoding.encodingsByType.TryGetValue(type, out encodingBase)) { return(encodingBase); } if (type.IsArray) { return(AmqpEncoding.arrayEncoding); } if (typeof(IList).IsAssignableFrom(type)) { return(AmqpEncoding.listEncoding); } if (!typeof(DescribedType).IsAssignableFrom(type)) { throw AmqpEncoding.GetEncodingException(SRAmqp.AmqpInvalidType(type.ToString())); } return(AmqpEncoding.describedTypeEncoding); }
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); }
public static EncodingBase GetEncoding(object value) { EncodingBase encodingBase = null; Type type = value.GetType(); if (AmqpEncoding.encodingsByType.TryGetValue(type, out encodingBase)) { return(encodingBase); } if (type.IsArray) { return(AmqpEncoding.arrayEncoding); } if (value is IList) { return(AmqpEncoding.listEncoding); } if (!(value is DescribedType)) { throw AmqpEncoding.GetEncodingException(SRAmqp.AmqpInvalidType(type.ToString())); } return(AmqpEncoding.describedTypeEncoding); }
public static EncodingBase GetEncoding(Type type) { EncodingBase encoding = null; if (encodingsByType.TryGetValue(type, out encoding)) { return(encoding); } else if (type.IsArray) { return(arrayEncoding); } else if (typeof(IList).IsAssignableFrom(type)) { return(listEncoding); } else if (typeof(DescribedType).IsAssignableFrom(type)) { return(describedTypeEncoding); } throw GetEncodingException(type.ToString()); }
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); }
public static EncodingBase GetEncoding(object value) { EncodingBase encoding = null; Type type = value.GetType(); if (encodingsByType.TryGetValue(type, out encoding)) { return(encoding); } else if (type.IsArray) { return(arrayEncoding); } else if (value is IList) { return(listEncoding); } else if (value is DescribedType) { return(describedTypeEncoding); } throw GetEncodingException(type.ToString()); }
public PremitiveType(Type type) { this.encoder = AmqpEncoding.GetEncoding(type); }