Example #1
0
        public T Deserialize(SerializerInput input)
        {
            T   item         = default;
            var childAddress = Unsafe.AsPointer(ref item);

            _methods.Read(childAddress, input);
            return(item);
        }
Example #2
0
        public override void Read(void *fieldAddress, SerializerInput input)
        {
            TMember def = default;
            var     ptr = Unsafe.AsPointer(ref def);

            _dataSerializer.Read(ptr, input);
            _set(Unsafe.Read <T>(fieldAddress), def);
        }
Example #3
0
        public override void Read(void *fieldAddress, SerializerInput input)
        {
            var obj = Unsafe.Read <object>(fieldAddress);//obj should not be null here

            var pinnable = Unsafe.As <object, PinnableObject>(ref obj);

            fixed(byte *objectAddress = &pinnable.Pinnable)
            {
                _dataSerializer.Read(objectAddress + _fieldOffset, input);
            }
        }
Example #4
0
 public void SkipData(DataType type, SerializerInput serializerInput)
 {
     if (GetForType(type, out var dataEntry))
     {
         dataEntry.Skip(serializerInput);
     }
     else
     {
         throw new Exception($"Unknown data type {type}");
     }
 }
Example #5
0
 public override void Read(void *fieldAddress, SerializerInput input)
 {
     if (input.BeginReadSize(out var end))
     {
         _fieldsSerializer.Read((byte *)fieldAddress, input);
         input.EndObject(end);
     }
     else
     {
         //"Changed from reference type?"
     }
 }
Example #6
0
        public override unsafe void Read(void *fieldAddress, SerializerInput input)
        {
            if (input.BeginReadSize(out var end))
            {
                _memberSerializer.Read((byte *)fieldAddress, input);

                input.EndObject(end);
            }
            else
            {
                ref var instance = ref Unsafe.AsRef <T>(fieldAddress);
                instance = default;
            }
        public override unsafe void Read(void *fieldAddress, SerializerInput input)
        {
            if (input.BeginReadSize(out var end))
            {
                ref var objectInstance = ref Unsafe.AsRef <object>(fieldAddress);
                if (objectInstance == null)
                {
                    objectInstance = Activator.CreateInstance(_type);
                }

                _memberSerializer.Read((byte *)fieldAddress, input);

                input.EndObject(end);
            }
Example #8
0
        public unsafe bool TryPopulateObject(SerializerInput input, object obj)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            var type = obj.GetType();

            if (TryGetDataSerializer(type, out var serializationMethods) == false)
            {
                //Debug.LogError($"Could not find serialization data for {type}");
                return(false);
            }

            serializationMethods.Read(Unsafe.AsPointer(ref obj), input);
            return(true);
        }
Example #9
0
        public unsafe bool TryDeserialize <T>(SerializerInput input, ref T result)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            if (TryGetDataSerializer(typeof(T), out var serializationMethods))
            {
                serializationMethods.Read(Unsafe.AsPointer(ref result), input);
                return(true);
            }
            else
            {
                result = default;
            }
            return(false);
        }
Example #10
0
        public unsafe bool TryPopulateObject <T>(SerializerInput input, Type type, ref T result)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            if (typeof(T).IsAssignableFrom(type) == false)
            {
                throw new Exception($"You are try to use a serializer:{type}  on a non compatible type {typeof(T)}");
                //return false;
            }

            if (TryGetDataSerializer(type, out var serializationMethods) == false)
            {
                //Debug.LogError($"Could not find serialization data for {type}");
                return(false);
            }

            serializationMethods.Read(Unsafe.AsPointer(ref result), input);
            return(true);
        }
Example #11
0
 public override void Read(void *fieldAddress, SerializerInput input)
 {
     ref var instance = ref Unsafe.AsRef <object>(fieldAddress);
Example #12
0
        public override unsafe void Read(void *fieldAddress, SerializerInput input)
        {
            var value = (ushort *)(fieldAddress);

            *value = input.ReadUInt16();
        }
Example #13
0
        public override void Read(void *fieldAddress, SerializerInput input)
        {
            var address = (byte *)fieldAddress + _fieldOffset;

            _dataSerializer.Read(address, input);
        }
Example #14
0
 public abstract void Read(void *fieldAddress, SerializerInput input);
Example #15
0
        public override unsafe void Read(void *fieldAddress, SerializerInput input)
        {
            var value = (double *)(fieldAddress);

            *value = input.ReadDouble();
        }
Example #16
0
 public override unsafe void Read(void *fieldAddress, SerializerInput input)
 {
     ref var array = ref Unsafe.AsRef <bool[]>(fieldAddress);
Example #17
0
 public bool TryPopulateObject <T>(SerializerInput input, ref T result)
 {
     return(TryPopulateObject(input, typeof(T), ref result));
 }
Example #18
0
 public override unsafe void Read(void *fieldAddress, SerializerInput input)
 {
     ref var value = ref Unsafe.AsRef <string>(fieldAddress);
Example #19
0
        public void Deserialize(ref T item, SerializerInput input)
        {
            var childAddress = Unsafe.AsPointer(ref item);

            _methods.Read(childAddress, input);
        }
Example #20
0
        public override unsafe void Read(void *fieldAddress, SerializerInput input)
        {
            var value = (long *)(fieldAddress);

            *value = input.ReadInt64();
        }
 public override void Read(void *fieldAddress, SerializerInput input)
 {
     throw new NotImplementedException();
 }
Example #22
0
        public override unsafe void Read(void *fieldAddress, SerializerInput input)
        {
            var value = (float *)(fieldAddress);

            *value = input.ReadFloat();
        }
Example #23
0
        public void Read(byte *objectAddress, SerializerInput input)
        {
            var fieldCount = input.ReadByte();
            var size       = fieldCount * 5;

            input.Skip(size);
            //we just skipped the required data so we have it in the buffer
            var buffer = input.Buffer;
            var offset = input.PositionInBuffer - size;

            var fieldDatas = _fields;

            if (SameHeader(buffer, offset, size))
            {
                for (int i = 0; i < fieldCount; i++)
                {
                    var fieldData       = fieldDatas[i];
                    var fieldDataOffset = objectAddress + fieldData.Offset;
                    var dataSerializer  = fieldData.SerializationMethods;
                    dataSerializer.Read(fieldDataOffset, input);
                }
            }
            else
            {
                int position = offset;

                var indexes   = stackalloc byte[fieldCount];
                var dataTypes = stackalloc DataType[fieldCount];

                var fieldsLength = fieldDatas.Length;

                int searchStart = 0;
                for (var i = 0; i < fieldCount; i++)
                {
                    dataTypes[i] = 0;

                    var field = buffer[position++] | buffer[position++] << 8 | buffer[position++] << 16 |
                                buffer[position++] << 24;

                    var type = (DataType)buffer[position++];

                    var deserialized = false;

                    for (var searchIndex = searchStart; searchIndex < fieldsLength; searchIndex++)
                    {
                        var fieldData = fieldDatas[searchIndex];

                        if (field == fieldData.FieldNameHash)
                        {
                            var dataSerializer = fieldData.SerializationMethods;

                            if (type == dataSerializer.GetDataType())
                            {
                                indexes[i]   = (byte)searchIndex;
                                deserialized = true;
                            }

                            searchStart = searchIndex + 1;
                            break;
                        }
                    }

                    if (deserialized == false)
                    {
                        if (FieldData.GetAlternate(fieldDatas, type, field, out var alternateIndex))
                        {
                            indexes[i] = (byte)alternateIndex;
                        }
                        else
                        {
                            dataTypes[i] = type;
                        }
                    }
                }

                for (var i = 0; i < fieldCount; i++)
                {
                    var index = indexes[i];

                    if ((byte)dataTypes[i] != 0)
                    {
                        _dataTypesDatabase.SkipData(dataTypes[i], input);
                        continue;
                    }

                    var fieldData       = fieldDatas[index];
                    var fieldDataOffset = objectAddress + fieldData.Offset;
                    var dataSerializer  = fieldData.SerializationMethods;
                    dataSerializer.Read(fieldDataOffset, input);
                }
            }
        }