예제 #1
0
        private unsafe void deSerialize(AutoCSer.BinarySerialize.DeSerializer deSerializer)
        {
            byte *read = deSerializer.Read;
            int   size = *(int *)read;

            if (size <= 0)
            {
                if (size == 0)
                {
                    Buffer.Null();
                    State              = (MemberState)(byte)*(int *)(read + sizeof(int));
                    deSerializer.Read += sizeof(int) * 2;
                }
                else
                {
                    Buffer.Start       = -size;
                    deSerializer.Read += sizeof(int);
                }
            }
            else if (size == Buffer.Length)
            {
                if (deSerializer.VerifyRead(sizeof(int) + size + (-size & 3)))
                {
                    fixed(byte *bufferFixed = Buffer.Array) AutoCSer.Memory.CopyNotNull(read + sizeof(int), bufferFixed + Buffer.Start, size);

                    State = MemberState.Remote;
                }
            }
            else
            {
                deSerializer.State = BinarySerialize.DeSerializeState.IndexOutOfRange;
            }
        }