public static byte ReadUByte(ByteBuffer buffer) { buffer.EnsureLength(FixedWidth.UByte); byte data = buffer.Buffer[buffer.Offset]; buffer.Complete(FixedWidth.UByte); return data; }
public static ushort ReadUShort(ByteBuffer buffer) { buffer.EnsureLength(FixedWidth.UShort); ushort data; fixed (byte* p = &buffer.Buffer[buffer.Offset]) { byte* d = (byte*)&data; d[0] = p[1]; d[1] = p[0]; } buffer.Complete(FixedWidth.UShort); return data; }
public static uint ReadUInt(ByteBuffer buffer) { buffer.EnsureLength(FixedWidth.UInt); uint data; fixed (byte* p = &buffer.Buffer[buffer.Offset]) { byte* d = (byte*)&data; d[0] = p[3]; d[1] = p[2]; d[2] = p[1]; d[3] = p[0]; } buffer.Complete(FixedWidth.UInt); return data; }
public static Guid ReadUuid(ByteBuffer buffer) { buffer.EnsureLength(FixedWidth.Uuid); Guid data; fixed (byte* p = &buffer.Buffer[buffer.Offset]) { byte* d = (byte*)&data; d[0] = p[3]; d[1] = p[2]; d[2] = p[1]; d[3] = p[0]; d[4] = p[5]; d[5] = p[4]; d[6] = p[7]; d[7] = p[6]; *((ulong*)&d[8]) = *((ulong*)&p[8]); } buffer.Complete(FixedWidth.Uuid); return data; }
public static double ReadDouble(ByteBuffer buffer) { buffer.EnsureLength(FixedWidth.Double); double data; fixed (byte* p = &buffer.Buffer[buffer.Offset]) { byte* d = (byte*)&data; d[0] = p[7]; d[1] = p[6]; d[2] = p[5]; d[3] = p[4]; d[4] = p[3]; d[5] = p[2]; d[6] = p[1]; d[7] = p[0]; } buffer.Complete(FixedWidth.Double); return data; }
public static ulong ReadULong(ByteBuffer buffer) { buffer.EnsureLength(FixedWidth.ULong); ulong data = ReadULong(buffer.Buffer, buffer.Offset, buffer.Length); buffer.Complete(FixedWidth.ULong); return data; }
protected override object OnReadObject(ByteBuffer buffer) { object container = Activator.CreateInstance(this.type); FormatCode formatCode = AmqpEncoding.ReadFormatCode(buffer); // FormatCode.Described if (formatCode != FormatCode.Described) { throw new AmqpException(AmqpError.InvalidField, "format-code"); } bool validDescriptor = false; formatCode = AmqpEncoding.ReadFormatCode(buffer); if (formatCode == FormatCode.ULong || formatCode == FormatCode.SmallULong) { ulong code = AmqpBitConverter.ReadULong(buffer); validDescriptor = this.descriptorCode == null || code == this.descriptorCode.Value; } else if (formatCode == FormatCode.Symbol8 || formatCode == FormatCode.Symbol32) { AmqpSymbol symbol = SymbolEncoding.Decode(buffer, formatCode); validDescriptor = this.descriptorName.Value == null || symbol.Equals(this.descriptorName); } if (!validDescriptor) { throw new AmqpException(AmqpError.InvalidField, "descriptor"); } formatCode = AmqpEncoding.ReadFormatCode(buffer); // FormatCode.List if (formatCode == FormatCode.List0) { return container; } int size = 0; int count = 0; AmqpEncoding.ReadSizeAndCount(buffer, formatCode, FormatCode.List8, FormatCode.List32, out size, out count); // prefetch bytes from the stream buffer.EnsureLength(size - FixedWidth.UInt); for (int i = 0; i < count; ++i) { object value = this.members[i].Type.OnReadObject(buffer); this.members[i].Accessor.SetObject(container, value); } return container; }