Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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;
        }