コード例 #1
0
        public JaggedArraySerializer(TypeSerializationMetadata typeMetadata)
            : base(typeMetadata)
        {
            if (typeMetadata != null)
            {
                if (!typeMetadata.cSharpType.GetElementType().IsArray)
                {
                    throw new SerializationException($"Cannot convert {typeMetadata.udonStorageType} to {typeMetadata.cSharpType}");
                }

                if (typeMetadata.arrayElementMetadata == null)
                {
                    throw new ArgumentException("Array element metadata cannot be null on array type metadata");
                }

                rootArraySerializer = CreatePooled(new TypeSerializationMetadata(typeMetadata.arrayElementMetadata.cSharpType.MakeArrayType())
                {
                    arrayElementMetadata = typeMetadata.arrayElementMetadata
                });

                int arrayDepth = 0;

                System.Type arrayType = typeMetadata.cSharpType;
                while (arrayType.IsArray)
                {
                    arrayDepth++;
                    arrayType = arrayType.GetElementType();
                }

                if (arrayDepth <= 1)
                {
                    throw new SerializationException("Jagged array serializer must run on jagged arrays.");
                }
            }
        }
コード例 #2
0
ファイル: Serializer.cs プロジェクト: aiya000/VRChat-Flya
        public static Serializer CreatePooled(System.Type type)
        {
            lookupPooledTypeData.SetToType(type);

            Serializer serializer;

            if (!typeSerializerDictionary.TryGetValue(lookupPooledTypeData, out serializer))
            {
                TypeSerializationMetadata typeMetadata = new TypeSerializationMetadata(type);
                serializer = Create(typeMetadata);
                typeSerializerDictionary.Add(typeMetadata, serializer);
            }

            return(serializer);
        }
コード例 #3
0
        public void SetToType(System.Type type)
        {
            cSharpType = type;
            if (cSharpType != null && cSharpType.IsArray)
            {
                System.Type elementType = cSharpType;
                while (elementType.IsArray)
                {
                    elementType = elementType.GetElementType();
                }

                arrayElementMetadata = new TypeSerializationMetadata(elementType);
            }

            udonStorageType = UdonSharpUtils.UserTypeToUdonType(cSharpType);
        }
コード例 #4
0
ファイル: Serializer.cs プロジェクト: ureishi/UdonSharp
        private static Serializer Create(TypeSerializationMetadata typeMetadata)
        {
            if (typeMetadata == null)
            {
                throw new System.ArgumentException("Type metadata cannot be null for serializer creation");
            }

            foreach (Serializer checkSerializer in _typeCheckSerializers)
            {
                if (checkSerializer.HandlesTypeSerialization(typeMetadata))
                {
                    return(checkSerializer.MakeSerializer(typeMetadata));
                }
            }

            throw new System.Exception($"Failed to initialize a valid serializer for {typeMetadata}");
        }
コード例 #5
0
ファイル: Serializer.cs プロジェクト: aiya000/VRChat-Flya
        public static Serializer CreatePooled(TypeSerializationMetadata typeMetadata)
        {
            if (typeMetadata == null)
            {
                throw new System.ArgumentException("Type metadata cannot be null for serializer creation");
            }

            Serializer serializer;

            if (!typeSerializerDictionary.TryGetValue(typeMetadata, out serializer))
            {
                serializer = Create(typeMetadata);
                typeSerializerDictionary.Add(typeMetadata, serializer);
            }

            return(serializer);
        }
コード例 #6
0
ファイル: Serializer.cs プロジェクト: ureishi/UdonSharp
        public static Serializer CreatePooled(System.Type type)
        {
            Serializer serializer;

            lock (_pooledSerializerLock)
            {
                _lookupPooledTypeData.SetToType(type);
                if (!_typeSerializerDictionary.TryGetValue(_lookupPooledTypeData, out serializer))
                {
                    TypeSerializationMetadata typeMetadata = new TypeSerializationMetadata(type);
                    serializer = Create(typeMetadata);
                    _typeSerializerDictionary.Add(typeMetadata, serializer);
                }
            }

            return(serializer);
        }
コード例 #7
0
        public ArraySerializer(TypeSerializationMetadata typeMetadata)
            : base(typeMetadata)
        {
            if (typeMetadata != null)
            {
                if (typeMetadata.arrayElementMetadata == null)
                {
                    throw new ArgumentException("Array element metadata cannot be null on array type metadata");
                }

                elementSerializer = (Serializer <T>)CreatePooled(typeMetadata.arrayElementMetadata);

                // If using the default serializer, we can just copy the array without iterating through each element.
                if (elementSerializer is DefaultSerializer <T> )
                {
                    elementSerializer = null;
                }
            }
        }
コード例 #8
0
ファイル: Serializer.cs プロジェクト: aiya000/VRChat-Flya
 /// <summary>
 /// Returns true if this serializer should be used for a given type, returns false otherwise.
 /// </summary>
 /// <param name="typeMetadata"></param>
 /// <returns></returns>
 public abstract bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata);
コード例 #9
0
 public UdonSharpBehaviourSerializer(TypeSerializationMetadata typeMetadata)
     : base(typeMetadata)
 {
 }
コード例 #10
0
 public SystemObjectSerializer(TypeSerializationMetadata typeMetadata)
     : base(typeMetadata)
 {
 }
コード例 #11
0
 public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata)
 {
     VerifyTypeCheckSanity();
     return(typeMetadata.cSharpType == typeof(object));
 }
コード例 #12
0
 public UnityObjectSerializer(TypeSerializationMetadata typeMetadata)
     : base(typeMetadata)
 {
 }
コード例 #13
0
 protected override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata)
 {
     VerifyTypeCheckSanity();
     return(typeMetadata.cSharpType == typeof(UdonSharpBehaviour));
 }
コード例 #14
0
 public UserEnumSerializer(TypeSerializationMetadata typeMetadata)
     : base(typeMetadata)
 {
 }
コード例 #15
0
 public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata)
 {
     VerifyTypeCheckSanity();
     return(typeMetadata.cSharpType == typeof(UnityEngine.Object) || typeMetadata.cSharpType.IsSubclassOf(typeof(UnityEngine.Object)));
 }
コード例 #16
0
 public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata)
 {
     VerifyTypeCheckSanity();
     return(typeMetadata.cSharpType.IsArray && !typeMetadata.cSharpType.GetElementType().IsArray);
 }
コード例 #17
0
 public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata)
 {
     return(typeMetadata.cSharpType == typeof(UdonSharpBehaviour) || typeMetadata.cSharpType.IsSubclassOf(typeof(UdonSharpBehaviour)));
 }
コード例 #18
0
ファイル: Serializer.cs プロジェクト: ureishi/UdonSharp
 protected abstract Serializer MakeSerializer(TypeSerializationMetadata typeMetadata);
コード例 #19
0
ファイル: Serializer.cs プロジェクト: ureishi/UdonSharp
 protected Serializer(TypeSerializationMetadata typeMetadata)
 {
     this.typeMetadata = typeMetadata;
 }
コード例 #20
0
ファイル: Serializer.cs プロジェクト: ureishi/UdonSharp
 /// <summary>
 /// Returns true if this serializer should be used for a given type, returns false otherwise.
 /// </summary>
 /// <param name="typeMetadata"></param>
 /// <returns></returns>
 protected abstract bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata);
コード例 #21
0
 protected override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata)
 {
     VerifyTypeCheckSanity();
     return(true);
 }
コード例 #22
0
 public DefaultSerializer(TypeSerializationMetadata typeMetadata)
     : base(typeMetadata)
 {
 }
コード例 #23
0
        protected override Serializer MakeSerializer(TypeSerializationMetadata typeMetadata)
        {
            VerifyTypeCheckSanity();

            return((Serializer)System.Activator.CreateInstance(typeof(ArraySerializer <>).MakeGenericType(typeMetadata.cSharpType.GetElementType()), typeMetadata));
        }
コード例 #24
0
        protected override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata)
        {
            VerifyTypeCheckSanity();

            return(typeMetadata.cSharpType.IsEnum && !CompilerUdonInterface.IsExternType(typeMetadata.cSharpType));
        }