Ejemplo n.º 1
0
        private void _WriteGetMetadataTypeMethod(Type type)
        {
            _writer.WriteLine("[Export(ExportFlags.AutoCode)]");

            if (_rootTypes.Contains(type))
            {
                _writer.WriteLine("public virtual ushort GetMetadataType ()");
                using (CodeScope.CreateCSharpScope(_writer))
                {
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
            else
            {
                var overrideText = _rootTypes.Contains(EditorMetaCommon.GetRootMetadata(type)) ? "override " : string.Empty;
                _writer.WriteLine("public {0}ushort GetMetadataType ()", overrideText);

                using (CodeScope.CreateCSharpScope(_writer))
                {
                    //var typeName = EditorMetaCommon.GetMetaTypeName(type);
                    //_writer.WriteLine("return (ushort) MetadataType.{0};", typeName);
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
        }
Ejemplo n.º 2
0
        private void _WriteSaveMethod(Type type, List <MemberBase> members)
        {
            if (_rootTypes.Contains(type))
            {
                _writer.WriteLine("[Export(ExportFlags.AutoCode)]");
                _writer.WriteLine("public virtual void Save (IOctetsWriter writer)");
                using (CodeScope.CreateCSharpScope(_writer))
                {
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
            else
            {
                using (MacroScope.CreateEditorScope(_writer.BaseWriter))
                {
                    _writer.WriteLine("[Export(ExportFlags.AutoCode)]");

                    var overrideText = _rootTypes.Contains(EditorMetaCommon.GetRootMetadata(type)) ? "override " : string.Empty;
                    _writer.WriteLine("public {0}void Save (IOctetsWriter writer)", overrideText);
                    using (CodeScope.Create(_writer, "{\n", "}\n"))
                    {
                        for (int index = 0; index < members.Count; ++index)
                        {
                            var member = members[index];
                            member.WriteSave(_writer);
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void _WriteOneClassOrStruct(Type type, ExportFlags flags)
        {
            var classOrStruct = type.IsClass ? "class" : "struct";
            var sealedClass   = type.IsClass && EditorMetaCommon.IsFinalType(type) ? "sealed " : string.Empty;

            _writer.WriteLine("[Serializable]");
            _writer.WriteLine("{0}partial {1} {2} : {3}", sealedClass, classOrStruct, type.Name, typeof(ILoadable).Name);

            using (MacroScope.CreateEditorScope(_writer.BaseWriter))
            {
                _writer.WriteLine(", {0}", typeof(ISavable).Name);
            }

            using (CodeScope.CreateCSharpScope(_writer))
            {
                var nestedTypes = type.GetNestedTypes(BindingFlags.Instance | BindingFlags.Public);
                _WriteNestedTypes(nestedTypes, flags);

                var members = new List <MemberBase>();
                _CollectSerializableMembers(type, members);

                _WriteSaveMethod(type, members);
                _WriteLoadMethod(type, members);
                _WriteToStringMethod(type, members);
                _WriteGetMetadataTypeMethod(type);
            }
        }
Ejemplo n.º 4
0
        private void _WriteSaveMetadata(CodeWriter writer)
        {
            if (!EditorMetaCommon.IsFinalType(_type))
            {
                writer.WriteLine("var {0}Type = {0}.GetMetadataType();", _name);
                writer.WriteLine("writer.Write({0}Type);", _name);
            }

            writer.WriteLine("{0}.Save(writer);", _name);
        }
Ejemplo n.º 5
0
 private void _InitRootTypes(MetaManager metaManager)
 {
     foreach (var type in metaManager.MetaTypes)
     {
         var rootType = EditorMetaCommon.GetRootMetadata(type.RawType);
         if (type.RawType != rootType)
         {
             _rootTypes.Add(rootType);
         }
     }
 }
Ejemplo n.º 6
0
        private void _WriteLoadMetadata(CodeWriter writer)
        {
            if (EditorMetaCommon.IsFinalType(_type))
            {
                writer.WriteLine("{0} = new {1}();", _name, EditorMetaCommon.GetMetaTypeName(_type));
            }
            else
            {
                Console.Error.WriteLine("IMetadata must be assignableFrom from MetadataMemmbers!");
            }

            writer.WriteLine("{0}.Load(reader);", _name);
        }
Ejemplo n.º 7
0
        public override void WriteLoad(CodeWriter writer)
        {
            Type   elementType     = _type.GetGenericArguments() [0];
            string elementTypeName = EditorMetaCommon.GetNestedClassName(elementType);

            writer.WriteLine("int {0}Count = reader.ReadInt32();", _name);
            writer.WriteLine("if (null == {0}) {{ {0} = new List<{1}>({0}Count); }} else {{ {0}.Clear(); }}", _name, elementTypeName);
            writer.WriteLine("for (int index= 0; index < {0}Count; ++index)", _name);

            using (CodeScope.CreateCSharpScope(writer))
            {
                writer.WriteLine("{0}.Add (default({1}));", _name, elementTypeName);
                _WriteLoadType(writer, elementType, _name + "[index]");
            }
        }
Ejemplo n.º 8
0
        private void _WriteEqualsToMethod(Type type, List <MemberBase> members)
        {
            _writer.WriteLine("[Export(ExportFlags.AutoCode)]");
            if (_rootTypes.Contains(type))
            {
                _writer.WriteLine("public virtual bool EqualsTo (IMetadata other)");
                using (CodeScope.CreateCSharpScope(_writer))
                {
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
            else
            {
                var overrideText = _rootTypes.Contains(EditorMetaCommon.GetRootMetadata(type)) ? "override " : string.Empty;
                _writer.WriteLine("public {0}bool EqualsTo (IMetadata other)", overrideText);

                using (CodeScope.CreateCSharpScope(_writer))
                {
                    var typeName = EditorMetaCommon.GetNestedClassName(type);
                    _writer.WriteLine("var that = ({0}) other;", typeName);

                    if (type.IsClass)
                    {
                        _writer.WriteLine("if (null == that)");
                        using (CodeScope.CreateCSharpScope(_writer))
                        {
                            _writer.WriteLine("return false;");
                        }
                    }

                    var memberCount = members.Count;

                    for (int index = 0; index < memberCount; ++index)
                    {
                        var member = members[index];
                        member.WriteNotEqualsReturn(_writer);
                    }

                    _writer.WriteLine("return true;");
                }
            }
        }
Ejemplo n.º 9
0
        public override void WriteLoad(CodeWriter writer)
        {
            string childtype = EditorMetaCommon.GetNestedClassName(_type.GetElementType()).Replace("+", ".");
            string prefix    = childtype;
            string postfix   = string.Empty;
            int    first     = childtype.IndexOf("[", StringComparison.Ordinal);

            if (first >= 0)
            {
                prefix  = childtype.Substring(0, first);
                postfix = childtype.Substring(first);
            }

            writer.WriteLine("{0} = new {1}[reader.ReadInt32()]{2};", _name, prefix, postfix);
            writer.WriteLine("for (int i{1} = 0; i{1} < {0}.Length; i{1}++)", _name, writer.Indent);
            using (CodeScope.CreateCSharpScope(writer))
            {
                _WriteLoadType(writer, _type.GetElementType(), _name + string.Format("[i{0}]", writer.Indent - 1));
            }
        }
Ejemplo n.º 10
0
        private void _CollectSerializableMembers(Type type, List <MemberBase> members)
        {
            var flags = BindingFlags.Instance | BindingFlags.Public;

            var idDecalringTemplate = 0;

            foreach (var field in type.GetFields(flags))
            {
                if (!EditorMetaCommon.IsAutoCodeIgnore(field))
                {
                    var member = MemberBase.Create(field.FieldType, field.Name);
                    if (field.DeclaringType == typeof(Template))
                    {
                        members.Insert(idDecalringTemplate++, member);
                    }
                    else
                    {
                        members.Add(member);
                    }
                }
            }
        }
Ejemplo n.º 11
0
        public static MemberBase Create(Type type, string name)
        {
            MemberBase member = null;

            if (null != type)
            {
                if (type.IsPrimitive)
                {
                    member = new PrimitiveMember();
                }
                else if (type == typeof(string))
                {
                    member = new StringMember();
                }
                else if (type == typeof(Vector2))
                {
                    member = new Vector2Member();
                }
                else if (type == typeof(Vector3))
                {
                    member = new Vector3Member();
                }
                else if (type == typeof(Vector4))
                {
                    member = new Vector4Member();
                }
                else if (type == typeof(Color))
                {
                    member = new ColorMember();
                }
                else if (type.IsArray)
                {
                    member = new ArrayMember();
                }
                else if (type.IsEnum)
                {
                    member = new EnumMember();
                }
                else if (type.IsGenericType)
                {
                    var genericTypeDefinition = type.GetGenericTypeDefinition();

                    if (typeof(List <>) == genericTypeDefinition)
                    {
                        member = new ListMember();
                    }
                }
                else if (EditorMetaCommon.IsMetadata(type))
                {
                    member = new MetadataMember();
                }
            }

            if (null != member)
            {
                member._type = type;
                member._name = name;
            }
            else
            {
                var text = string.Format("Invalid type found: typeof({0}) = {1}", name, type);
                Console.Error.WriteLine(text);
            }

            return(member);
        }
Ejemplo n.º 12
0
 public override void WriteLoad(CodeWriter writer)
 {
     writer.WriteLine("{0} = ({1}) reader.ReadUInt16();", _name, EditorMetaCommon.GetNestedClassName(_type));
 }