public Bgra32Image Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) { if (MessagePackBinary.IsNil(bytes, offset)) { readSize = 1; return(null); } var startOffset = offset; var arrayCount = MessagePackBinary.ReadArrayHeaderRaw(bytes, offset, out var rs); offset += rs; if (arrayCount != 3) { throw new InvalidDataException(); } var width = MessagePackBinary.ReadInt32(bytes, offset, out rs); offset += rs; var height = MessagePackBinary.ReadInt32(bytes, offset, out rs); offset += rs; var data = MessagePackBinary.ReadBytesSegment(bytes, offset, out rs); offset += rs; readSize = offset - startOffset; return(new Bgra32ImageFromMessagePack(width, height, data)); }
public T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) { var segment = MessagePackBinary.ReadBytesSegment(bytes, offset, out readSize); ValidateRead(segment.Array, segment.Offset); return(Unsafe.ReadUnaligned <T>(ref segment.Array[segment.Offset])); }
public ArraySegment <byte> ReadBytesSegment() { ArraySegment <byte> value = MessagePackBinary.ReadBytesSegment(Buffer, Position, out int readSize); Position += readSize; return(value); }
public unsafe T Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) { var segment = MessagePackBinary.ReadBytesSegment(bytes, offset, out readSize); ValidateRead(segment.Array, segment.Offset); T value; fixed(void *p = &segment.Array[segment.Offset]) { UnsafeUtility.CopyPtrToStructure <T>(p, out value); } return(value); }