public static ReadFormatCode ( ByteBuffer buffer ) : FormatCode | ||
buffer | ByteBuffer | |
리턴 | FormatCode |
public static string Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } int count; Encoding encoding; if (formatCode == FormatCode.String8Utf8) { count = (int)AmqpBitConverter.ReadUByte(buffer); encoding = Encoding.UTF8; } else if (formatCode == FormatCode.String32Utf8) { count = (int)AmqpBitConverter.ReadUInt(buffer); encoding = Encoding.UTF8; } else { throw AmqpEncoding.GetEncodingException(AmqpResources.GetString(AmqpResources.AmqpInvalidFormatCode, formatCode, buffer.Offset)); } string value = encoding.GetString(buffer.Buffer, buffer.Offset, count); buffer.Complete(count); return(value); }
public static ArraySegment <byte> Decode(ByteBuffer buffer, FormatCode formatCode, bool copy) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(AmqpConstants.NullBinary); } int count; AmqpEncoding.ReadCount(buffer, formatCode, FormatCode.Binary8, FormatCode.Binary32, out count); if (count == 0) { return(AmqpConstants.EmptyBinary); } else { ArraySegment <byte> value; if (copy) { byte[] valueBuffer = new byte[count]; Buffer.BlockCopy(buffer.Buffer, buffer.Offset, valueBuffer, 0, count); value = new ArraySegment <byte>(valueBuffer, 0, count); } else { value = new ArraySegment <byte>(buffer.Buffer, buffer.Offset, count); } buffer.Complete(count); return(value); } }
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); }
public static IList Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } IList list = new List <object>(); if (formatCode == FormatCode.List0) { return(list); } int size; int count; AmqpEncoding.ReadSizeAndCount(buffer, formatCode, FormatCode.List8, FormatCode.List32, out size, out count); for (; count > 0; --count) { object item = AmqpEncoding.DecodeObject(buffer); list.Add(item); } return(list); }
public static Guid?Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } return(AmqpBitConverter.ReadUuid(buffer)); }
public static DateTime?Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } return(ToDateTime(AmqpBitConverter.ReadLong(buffer))); }
public static decimal?Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } return(DecimalEncoding.DecodeValue(buffer, formatCode)); }
public static object DecodeObject(ByteBuffer buffer) { FormatCode formatCode = AmqpEncoding.ReadFormatCode(buffer); if (formatCode == FormatCode.Null) { return(null); } return(DecodeObject(buffer, formatCode)); }
public static T[] Decode <T>(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } int size; int count; AmqpEncoding.ReadSizeAndCount(buffer, formatCode, FormatCode.Array8, FormatCode.Array32, out size, out count); formatCode = AmqpEncoding.ReadFormatCode(buffer); return(ArrayEncoding.Decode <T>(buffer, size, count, formatCode)); }
public static AmqpSymbol Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(new AmqpSymbol()); } int count; AmqpEncoding.ReadCount(buffer, formatCode, FormatCode.Symbol8, FormatCode.Symbol32, out count); string value = Encoding.ASCII.GetString(buffer.Buffer, buffer.Offset, count); buffer.Complete(count); return(new AmqpSymbol(value)); }
public static AmqpMap Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } int size; int count; AmqpEncoding.ReadSizeAndCount(buffer, formatCode, FormatCode.Map8, FormatCode.Map32, out size, out count); AmqpMap map = new AmqpMap(); MapEncoding.ReadMapValue(buffer, map, size, count); return(map); }
public static char?Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } int intValue = AmqpBitConverter.ReadInt(buffer); string value = char.ConvertFromUtf32(intValue); if (value.Length > 1) { throw new ArgumentOutOfRangeException(CommonResources.ErrorConvertingToChar); } return(value[0]); }
public override object DecodeObject(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } int size = 0; int count = 0; AmqpEncoding.ReadSizeAndCount(buffer, formatCode, FormatCode.Array8, FormatCode.Array32, out size, out count); formatCode = AmqpEncoding.ReadFormatCode(buffer); Array array = null; switch (formatCode) { case FormatCode.Boolean: array = ArrayEncoding.Decode <bool>(buffer, size, count, formatCode); break; case FormatCode.UByte: array = ArrayEncoding.Decode <byte>(buffer, size, count, formatCode); break; case FormatCode.UShort: array = ArrayEncoding.Decode <ushort>(buffer, size, count, formatCode); break; case FormatCode.UInt: case FormatCode.SmallUInt: array = ArrayEncoding.Decode <uint>(buffer, size, count, formatCode); break; case FormatCode.ULong: case FormatCode.SmallULong: array = ArrayEncoding.Decode <ulong>(buffer, size, count, formatCode); break; case FormatCode.Byte: array = ArrayEncoding.Decode <sbyte>(buffer, size, count, formatCode); break; case FormatCode.Short: array = ArrayEncoding.Decode <short>(buffer, size, count, formatCode); break; case FormatCode.Int: case FormatCode.SmallInt: array = ArrayEncoding.Decode <int>(buffer, size, count, formatCode); break; case FormatCode.Long: case FormatCode.SmallLong: array = ArrayEncoding.Decode <long>(buffer, size, count, formatCode); break; case FormatCode.Float: array = ArrayEncoding.Decode <float>(buffer, size, count, formatCode); break; case FormatCode.Double: array = ArrayEncoding.Decode <double>(buffer, size, count, formatCode); break; case FormatCode.Char: array = ArrayEncoding.Decode <char>(buffer, size, count, formatCode); break; case FormatCode.TimeStamp: array = ArrayEncoding.Decode <DateTime>(buffer, size, count, formatCode); break; case FormatCode.Uuid: array = ArrayEncoding.Decode <Guid>(buffer, size, count, formatCode); break; case FormatCode.Binary32: case FormatCode.Binary8: array = ArrayEncoding.Decode <ArraySegment <byte> >(buffer, size, count, formatCode); break; case FormatCode.String32Utf8: case FormatCode.String8Utf8: array = ArrayEncoding.Decode <string>(buffer, size, count, formatCode); break; case FormatCode.Symbol32: case FormatCode.Symbol8: array = ArrayEncoding.Decode <AmqpSymbol>(buffer, size, count, formatCode); break; case FormatCode.List32: case FormatCode.List8: array = ArrayEncoding.Decode <IList>(buffer, size, count, formatCode); break; case FormatCode.Map32: case FormatCode.Map8: array = ArrayEncoding.Decode <AmqpMap>(buffer, size, count, formatCode); break; case FormatCode.Array32: case FormatCode.Array8: array = ArrayEncoding.Decode <Array>(buffer, size, count, formatCode); break; default: throw new NotSupportedException(CommonResources.GetString(CommonResources.NotSupportFrameCode, formatCode)); } return(array); }
static T[] Decode <T>(ByteBuffer buffer, int size, int count, FormatCode formatCode) { object descriptor = null; if (formatCode == FormatCode.Described) { descriptor = AmqpEncoding.DecodeObject(buffer); formatCode = AmqpEncoding.ReadFormatCode(buffer); } // Special cases for primitive types switch (formatCode) { case FormatCode.UInt0: case FormatCode.SmallUInt: return((T[])DecodeArray <uint>(buffer, formatCode, count, (b, f) => UIntEncoding.Decode(b, f).Value)); case FormatCode.UInt: return((T[])DecodeArray <uint>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadUInt(b))); case FormatCode.SmallInt: return((T[])DecodeArray <int>(buffer, formatCode, count, (b, f) => IntEncoding.Decode(b, f).Value)); case FormatCode.Int: return((T[])DecodeArray <int>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadInt(b))); case FormatCode.ULong0: case FormatCode.SmallULong: return((T[])DecodeArray <ulong>(buffer, formatCode, count, (b, f) => ULongEncoding.Decode(b, f).Value)); case FormatCode.ULong: return((T[])DecodeArray <ulong>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadULong(b))); case FormatCode.SmallLong: return((T[])DecodeArray <long>(buffer, formatCode, count, (b, f) => LongEncoding.Decode(b, f).Value)); case FormatCode.Long: return((T[])DecodeArray <long>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadLong(b))); case FormatCode.Symbol8: case FormatCode.Symbol32: return((T[])DecodeArray <AmqpSymbol>(buffer, formatCode, count, (b, f) => SymbolEncoding.Decode(b, f))); case FormatCode.Boolean: return((T[])DecodeArray <bool>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadUByte(b) > 0)); case FormatCode.UByte: return((T[])DecodeArray <byte>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadUByte(b))); case FormatCode.Byte: return((T[])DecodeArray <sbyte>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadByte(b))); case FormatCode.UShort: return((T[])DecodeArray <ushort>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadUShort(b))); case FormatCode.Short: return((T[])DecodeArray <short>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadShort(b))); case FormatCode.Float: return((T[])DecodeArray <float>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadFloat(b))); case FormatCode.Double: return((T[])DecodeArray <double>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadDouble(b))); case FormatCode.Decimal32: case FormatCode.Decimal64: case FormatCode.Decimal128: return((T[])DecodeArray <decimal>(buffer, formatCode, count, (b, f) => DecimalEncoding.DecodeValue(b, f))); case FormatCode.Char: return((T[])DecodeArray <char>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadChar(b))); case FormatCode.TimeStamp: return((T[])DecodeArray <DateTime>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadTimestamp(b))); case FormatCode.Uuid: return((T[])DecodeArray <Guid>(buffer, formatCode, count, (b, f) => AmqpBitConverter.ReadUuid(b))); default: break; } // General path EncodingBase encoding = AmqpEncoding.GetEncoding(formatCode); T[] array = new T[count]; 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); }