public unsafe void Serialize(ref byte[] buffer, ref int offset, T[] value) { int count = value.Length; // Ensure capacity int size = _itemSize; int neededSize = (count * size) + 5; SerializerBinary.EnsureCapacity(ref buffer, offset, neededSize); // Count SerializerBinary.WriteUInt32NoCheck(buffer, ref offset, (uint)count); int bytes = count * size; if (bytes == 0) { return; // Write fixed(T *srcAr = &value[0]) fixed(byte *destAr = &buffer[0]) { byte *src = (byte *)srcAr; byte *dest = destAr + offset; SerializerBinary.FastCopy(src, dest, (uint)bytes); } offset += bytes; }
public unsafe void Serialize(ref byte[] buffer, ref int offset, T[] value) { // Ensure capacity int size = _size; int neededSize = size + 5; SerializerBinary.EnsureCapacity(ref buffer, offset, neededSize); // Count int count = value.Length; SerializerBinary.WriteUInt32NoCheck(buffer, ref offset, (uint)count); int bytes = count * size; if (bytes == 0) { return; // Write fixed(T *p = value) Marshal.Copy(new IntPtr(p), buffer, offset, count); offset += bytes; }
public unsafe void Serialize(ref byte[] buffer, ref int offset, T[] value) { // Ensure capacity int size = _size; int neededSize = size + 5; SerializerBinary.EnsureCapacity(ref buffer, offset, neededSize); // Count int count = value.Length; SerializerBinary.WriteUInt32NoCheck(buffer, ref offset, (uint)count); int bytes = count * size; if (bytes == 0) { return; } // Write #if NETSTANDARD2_0 || NET47 fixed(T *srcAr = &value[0]) fixed(byte *dest = &buffer[offset]) { byte *srcByteAr = (byte *)srcAr; Buffer.MemoryCopy(srcByteAr, dest, bytes, bytes); } #else fixed(T *p = &value[0]) Marshal.Copy(new IntPtr(p), buffer, offset, count); #endif offset += bytes; }