Example #1
0
        public string GenerateHeaderInclude(SirenClass sirenClass)
        {
            StringBuilder sb = new StringBuilder();

            //sb.AppendLine();
            foreach (var includeType in sirenClass.IncludeTypes)
            {
                var includeSirenClass = SirenFactory.FindClass(includeType);
                if (includeSirenClass != null)
                {
                    if (!string.IsNullOrEmpty(includeSirenClass.Attribute.NewHeader))
                    {
                        sb.AppendFormat("#include \"{0}/{1}.h\"\r\n", includeSirenClass.Attribute.Directory, includeSirenClass.Attribute.NewHeader);
                    }
                    else
                    {
                        sb.AppendFormat("#include \"{0}/{1}.h\"\r\n", includeSirenClass.Attribute.Directory, SirenFactory.GetTypeName(includeType));
                    }
                }
                else
                {
                    sb.AppendFormat("#include \"{0}.h\"\r\n", SirenFactory.GetTypeName(includeType));
                }
            }

            if (sirenClass.Attribute.Mode.HasFlag(SirenGenerateMode.SirenConfig))
            {
                sb.AppendFormat("#include \"Core/Siren/ISirenConfig.h\"\r\n");
            }
            return(sb.ToString());
        }
Example #2
0
        public string GenerateHeaderCopy(SirenClass sirenClass)
        {
            var           typeName = sirenClass.Name;
            StringBuilder sb       = new StringBuilder();

            //sb.AppendLine();

            sb.AppendLine("public:");
            //copy construct
            sb.AppendFormat("\t{0}(const {1}& other)\r\n", typeName, typeName);
            sb.AppendFormat("\t{{\r\n");
            foreach (var sirenProperty in sirenClass.Properties)
            {
                var methodType = sirenProperty.MethodType;
                switch (methodType)
                {
                case SirenPropertyMethodType.Pointer:
                    sb.AppendFormat("\t\tSAFE_CONSTRUCT_PTR({0},m{1},other.m{2});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name, sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Value:
                case SirenPropertyMethodType.List:
                case SirenPropertyMethodType.Dictionary:
                    sb.AppendFormat("\t\tm{0} = other.m{1};\r\n", sirenProperty.Name, sirenProperty.Name);
                    break;
                }
            }
            sb.AppendFormat("\t}}\r\n");

            //assign
            sb.AppendFormat("\t{0}& operator=(const {1}& other)\r\n", typeName, typeName);
            sb.AppendFormat("\t{{\r\n");
            foreach (var sirenProperty in sirenClass.Properties)
            {
                var methodType = sirenProperty.MethodType;
                switch (methodType)
                {
                case SirenPropertyMethodType.Pointer:

                    sb.AppendFormat("\t\tSAFE_COPY_PTR({0},m{1},other.m{2});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name, sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Value:
                case SirenPropertyMethodType.List:
                case SirenPropertyMethodType.Dictionary:
                    sb.AppendFormat("\t\tm{0} = other.m{1};\r\n", sirenProperty.Name, sirenProperty.Name);
                    break;
                }
            }
            sb.AppendFormat("\t\treturn *this;\r\n");

            sb.AppendFormat("\t}}\r\n");


            return(sb.ToString());
        }
Example #3
0
 public virtual void OnProperty(string name, ushort id, object obj, bool withHeader = true)
 {
     if (withHeader)
     {
         OnPropertyBegin(name, id, SirenFactory.GetDataType(obj.GetType()));
         OnValue(obj);
         OnPropertyEnd();
     }
     else
     {
         OnValue(obj);
     }
 }
Example #4
0
        public override T OnProperty <T>(string name, ushort id, bool withHeader = true)
        {
            ushort         outId;
            SirenFieldType outDataType;
            int            r = OnPropertyBegin(name, id, SirenFactory.GetPropertyType(typeof(T)), out outId, out outDataType);

            if (r == 0)
            {
                var obj = OnValue(typeof(T));
                OnPropertyEnd();
                return((T)obj);
            }
            return(default(T));
        }
Example #5
0
        public string GenerateHeaderMethod(SirenClass sirenClass)
        {
            StringBuilder sb = new StringBuilder();

            //sb.AppendLine();

            //add methods
            sb.AppendLine("public:");
            foreach (var sirenProperty in sirenClass.Properties)
            {
                if (sirenProperty.Attribute.SuppressMethod)
                {
                    continue;
                }

                var methodType = sirenProperty.MethodType;
                switch (methodType)
                {
                case SirenPropertyMethodType.Value:
                    sb.AppendFormat("\tSIREN_METHOD({0}, {1});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Pointer:
                    sb.AppendFormat("\tSIREN_METHOD_PTR({0}, {1});\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.List:
                    var itemType = sirenProperty.Type.GenericTypeArguments[0];
                    sb.AppendFormat("\tSIREN_METHOD_LIST({0}, {1});\r\n", SirenFactory.GetTypeName(itemType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Dictionary:
                    var keyType   = sirenProperty.Type.GenericTypeArguments[0];
                    var valueType = sirenProperty.Type.GenericTypeArguments[1];
                    if (sirenProperty.Attribute.AddDictionaryMethods)
                    {
                        sb.AppendFormat("\tSIREN_METHOD_DICTIONARY_EX({0}, {1}, {2});\r\n", SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name);
                    }
                    else
                    {
                        sb.AppendFormat("\tSIREN_METHOD_DICTIONARY({0}, {1}, {2});\r\n", SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name);
                    }


                    break;
                }
            }

            return(sb.ToString());
        }
Example #6
0
 public virtual T OnProperty <T>(string name, ushort id, bool withHeader = true)
 {
     if (withHeader)
     {
         ushort        outId;
         SirenDataType outDataType;
         int           r = OnPropertyBegin(name, id, SirenFactory.GetDataType(typeof(T)), out outId, out outDataType);
         if (r == 0)
         {
             var obj = OnValue(typeof(T));
             OnPropertyEnd();
             return((T)obj);
         }
         return(default(T));
     }
     else
     {
         return((T)OnValue(typeof(T)));
     }
 }
Example #7
0
        public string GenerateHeaderField(SirenClass sirenClass)
        {
            StringBuilder sb = new StringBuilder();

            //sb.AppendLine();

            //add fields
            sb.AppendLine("protected:");
            foreach (var sirenProperty in sirenClass.Properties)
            {
                var methodType = sirenProperty.MethodType;
                switch (methodType)
                {
                case SirenPropertyMethodType.Value:
                    sb.AppendFormat("\t{0} m{1};\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Pointer:
                    sb.AppendFormat("\t{0}* m{1};\r\n", SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.List:
                    var itemType = sirenProperty.Type.GenericTypeArguments[0];
                    sb.AppendFormat("\tList<{0}> m{1};\r\n", SirenFactory.GetTypeName(itemType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Dictionary:
                    var keyType   = sirenProperty.Type.GenericTypeArguments[0];
                    var valueType = sirenProperty.Type.GenericTypeArguments[1];
                    sb.AppendFormat("\tDictionary<{0}, {1}> m{2};\r\n", SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name);
                    break;
                }
            }

            return(sb.ToString());
        }
Example #8
0
 public static void Register()
 {
     SirenFactory.RegisterTypeName <Scale2 <float> >("Scale2F");
     SirenFactory.RegisterTypeName <Scale2 <uint> >("Scale2U");
 }
Example #9
0
 public static void Register()
 {
     SirenFactory.RegisterTypeName <Point2 <float> >("Point2F");
     SirenFactory.RegisterTypeName <Point2 <uint> >("Point2U");
 }
Example #10
0
 public static void Register()
 {
     SirenFactory.RegisterTypeName <Padding4 <float> >("Padding4F");
     SirenFactory.RegisterTypeName <Padding4 <uint> >("Padding4U");
 }
Example #11
0
 public static void Register()
 {
     SirenFactory.RegisterTypeName <Range <float> >("RangeF");
     SirenFactory.RegisterTypeName <Range <uint> >("RangeU");
 }
Example #12
0
        public string GenerateHeaderSchema(SirenClass sirenClass)
        {
            var           typeName = sirenClass.Name;
            StringBuilder sb       = new StringBuilder();

            //sb.AppendLine();

            //add schema
            sb.AppendFormat("struct {0}::Schema\r\n", typeName);
            sb.AppendLine("{");

            foreach (var sirenProperty in sirenClass.Properties)
            {
                var methodType = sirenProperty.MethodType;
                switch (methodType)
                {
                case SirenPropertyMethodType.Value:
                    sb.AppendFormat("\tSIREN_PROPERTY({0}, {1}, {2}, {3}, {4}, m{5});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Pointer:
                    sb.AppendFormat("\tSIREN_PROPERTY({0}, {1}, {2}, {3}, {4}*, m{5});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(sirenProperty.Type), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.List:
                    var itemType = sirenProperty.Type.GenericTypeArguments[0];
                    sb.AppendFormat("\tSIREN_PROPERTY_LIST({0}, {1}, {2}, {3}, {4}, m{5});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(itemType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name);
                    break;

                case SirenPropertyMethodType.Dictionary:
                    var keyType   = sirenProperty.Type.GenericTypeArguments[0];
                    var valueType = sirenProperty.Type.GenericTypeArguments[1];
                    sb.AppendFormat("\tSIREN_PROPERTY_DICTIONARY({0}, {1}, {2}, {3}, {4}, {5}, m{6});\r\n", sirenProperty.Index, sirenProperty.Id, sirenProperty.Attribute.Modifier, typeName, SirenFactory.GetTypeName(keyType, sirenProperty.Attribute.ForceKeyToPtr), SirenFactory.GetTypeName(valueType, sirenProperty.Attribute.ForceValueToPtr), sirenProperty.Name);
                    break;
                }
            }

            //add properties
            if (sirenClass.IsRoot)
            {
                sb.AppendFormat("\tSIREN_PROPERTIES_{0}(void,{1});\r\n", sirenClass.Properties.Count, typeName);
            }
            else
            {
                sb.AppendFormat("\tSIREN_PROPERTIES_{0}({1},{2});\r\n", sirenClass.Properties.Count, sirenClass.BaseSirenClass.Name, typeName);
            }

            sb.Append("};");



            return(sb.ToString());
        }
Example #13
0
 public override void OnProperty(string name, ushort id, object obj, bool withHeader = true)
 {
     OnPropertyBegin(name, id, SirenFactory.GetDataType(obj.GetType()));
     OnValue(obj);
     OnPropertyEnd();
 }