Ejemplo n.º 1
0
        private static string buildStructFieldHeader(string tab, rStructField m)
        {
            if (m.ArrayType == EArrayType.SCALAR)
            {
                if (string.IsNullOrEmpty(m.Value))
                {
                    return(string.Format(tab + "public {0} {1};\n", Converter.DDLTypeToCSharpType(m.Type, m.TypeName), m.Name));
                }
                return(string.Format(tab + "public {0} {1} = {2};\n", Converter.DDLTypeToCSharpType(m.Type, m.TypeName), m.Name, m.Value));
            }

            if (m.ArrayType == EArrayType.DYNAMIC)
            {
                return(string.Format(tab + "public {0}[] {1};\n", Converter.DDLTypeToCSharpType(m.Type, m.TypeName), m.Name));
            }

            if (m.ArrayType == EArrayType.LIST)
            {
                return(string.Format(tab + "public List<{0}> {1} = new List<{0}>();\n", Converter.DDLTypeToCSharpType(m.Type, m.TypeName), m.Name));
            }

            if (m.ArrayType == EArrayType.FIXED)
            {
                return(string.Format(tab + "public {0}[{2}] {1};\n", Converter.DDLTypeToCSharpType(m.Type, m.TypeName), m.Name, m.Count));
            }

            return("ERROR");
        }
Ejemplo n.º 2
0
        private static string buildSubobjectSerialization(string tab, rStruct str, string parentJson, string self,
                                                          rStructField parent, List <rStruct> Structs, int nestLevel, bool nest = true,
                                                          EArrayType array = EArrayType.SCALAR)
        {
            StringBuilder sb = new StringBuilder();

            if (!nest)
            {
                sb.AppendFormat(tab + "json {0};\n", parentJson);
                foreach (var f in str.Fields)
                {
                    sb.Append(buildStructFieldJsonSerialization(tab, f, parentJson, self, Structs, nestLevel + 1));
                }
            }
            else
            {
                if (array == EArrayType.SCALAR)
                {
                    string jsonName = string.Format("_{0}_{1}", parentJson, parent.Name);
                    string newSelf  = string.Format("{0}{1}.", self, parent.Name);
                    sb.AppendLine(tab + "{");
                    sb.AppendFormat(tab + t1 + "json {0};\n", jsonName);
                    foreach (var f in str.Fields)
                    {
                        sb.Append(buildStructFieldJsonSerialization(tab + t1, f, jsonName, newSelf, Structs,
                                                                    nestLevel + 1));
                    }
                    sb.AppendFormat(tab + t1 + "{0}[\"{1}\"] = {2};\n", parentJson, parent.Name, jsonName);
                    sb.AppendLine(tab + "}");
                }
                else if (array == EArrayType.DYNAMIC || array == EArrayType.FIXED || array == EArrayType.LIST)
                {
                    string jsonName = string.Format("_{0}_{1}", parentJson, parent.Name);
                    string itrName  = string.Format("{0}_tmp", jsonName);
                    string itr      = string.Format("i{0}", nestLevel);
                    string len      = string.Format("len{0}", nestLevel);
                    string lenValue = array == EArrayType.FIXED
                        ? parent.Count.ToString()
                        : string.Format("{0}{1}.size()", self, parent.Name);
                    sb.AppendLine(tab + "{");
                    sb.AppendFormat(tab + t1 + "json {0};\n", jsonName);
                    sb.AppendFormat(tab + t1 + "for (size_t {0} = 0; {0} < {1}; ++{0})\n", itr, lenValue);
                    sb.AppendLine(tab + t1 + "{");
                    sb.AppendFormat(tab + t2 + "json {0};\n", itrName);

                    string itrSelf = string.Format("{0}{1}[{2}].", self, parent.Name, itr);
                    foreach (var f in str.Fields)
                    {
                        sb.Append(buildStructFieldJsonSerialization(tab + t2, f, itrName, itrSelf, Structs, nestLevel + 1));
                    }

                    sb.AppendFormat(tab + t2 + "{0}.push_back({1});\n", jsonName, itrName);
                    sb.AppendLine(tab + t1 + "}");
                    sb.AppendFormat(tab + t1 + "{0}[\"{1}\"] = {2};\n", parentJson, parent.Name, jsonName);
                    sb.AppendLine(tab + "}");
                }
            }

            return(sb.ToString());
        }
Ejemplo n.º 3
0
        private static string Field(string tab, rStructField m, string parentJson,
                                    string self,
                                    List <rStruct> Structs, int nestLevel)
        {
            StringBuilder sb = new StringBuilder();

            if (Converter.IsPOD(m.Type))
            {
                sb.AppendFormat(tab + "it = {1}.find(\"{0}\");\n", m.Name, parentJson);
                sb.AppendFormat(tab + "if (it != {1}.end() && it.value().{0})\n", field_json_deserializer_type(m), parentJson);
                sb.AppendFormat(tab + t1 + "{0}{1} = it.value().{2}();\n", self, m.Name, field_to_cpp_deserializer_type(m));
            }
            else
            {
                if (m.Type == EType.VECTOR2)
                {
                }
                if (m.Type == EType.VECTOR3)
                {
                }
                if (m.Type == EType.VECTOR4)
                {
                }
                if (m.Type == EType.Quaternion)
                {
                }


                if (m.ArrayType == EArrayType.SCALAR)
                {
                    foreach (var st in Structs)
                    {
                        if (st.Name == m.TypeName)
                        {
                            var o1 = Subobject(tab, st, parentJson, self, m, Structs, nestLevel + 1);
                            return(string.Format("{0}\n", o1));
                        }
                    }
                }
                else if (m.ArrayType == EArrayType.DYNAMIC || m.ArrayType == EArrayType.FIXED || m.ArrayType == EArrayType.LIST)
                {
                    foreach (var st in Structs)
                    {
                        if (st.Name == m.TypeName)
                        {
                            var o1 = Subobject(tab, st, parentJson, self, m, Structs, nestLevel + 1, true, m.ArrayType);
                            return(string.Format("{0}\n", o1));
                        }
                    }
                }
            }
            return(sb.ToString());
        }
Ejemplo n.º 4
0
        private void ProcessStructOrClass(rStruct strDef, MemberDeclarationSyntax member)
        {
            if (member is FieldDeclarationSyntax)
            {
                var field = new rStructField();
                Struct.ParseStructField((FieldDeclarationSyntax)member, ref field, Selects, Structs);
                strDef.Fields.Add(field);
            }
            else if (member is ClassDeclarationSyntax)
            {
                var node      = member as ClassDeclarationSyntax;
                var newstrDef = new rStruct();
                newstrDef.Name = node.Identifier.Text;

                List <string> namespaceChain = new List <string>();
                BuildFullNamespaceChain(node.Parent, namespaceChain);
                newstrDef.Namespace = namespaceChain;

                foreach (var m in node.Members)
                {
                    ProcessStructOrClass(newstrDef, m);
                }
                Structs.Add(newstrDef);
                strDef.Childs.Add(newstrDef);
            }
            else if (member is StructDeclarationSyntax)
            {
                var node      = member as StructDeclarationSyntax;
                var newstrDef = new rStruct();
                newstrDef.Name = node.Identifier.Text;

                List <string> namespaceChain = new List <string>();
                BuildFullNamespaceChain(node.Parent, namespaceChain);
                newstrDef.Namespace = namespaceChain;

                foreach (var m in node.Members)
                {
                    ProcessStructOrClass(newstrDef, m);
                }
                Structs.Add(newstrDef);
                strDef.Childs.Add(newstrDef);
            }
        }
Ejemplo n.º 5
0
        private static string buildStructFieldHeader(string tab, rStructField m)
        {
            if (m.ArrayType == EArrayType.SCALAR)
            {
                return(string.Format(tab + "{0} {1};\n", Converter.DDLTypeToCPPType(m.Type, m.TypeName), m.Name));
            }

            if (m.ArrayType == EArrayType.DYNAMIC || m.ArrayType == EArrayType.LIST)
            {
                return(string.Format(tab + "std::vector<{0}> {1};\n", Converter.DDLTypeToCPPType(m.Type, m.TypeName),
                                     m.Name));
            }

            if (m.ArrayType == EArrayType.FIXED)
            {
                return(string.Format(tab + "{0} {1}[2];\n", Converter.DDLTypeToCPPType(m.Type, m.TypeName), m.Name,
                                     m.Count));
            }

            return("ERROR");
        }
Ejemplo n.º 6
0
        private static string field_json_deserializer_type(rStructField f)
        {
            var t = f.Type;

            if (f.ArrayType == EArrayType.SCALAR)
            {
                switch (t)
                {
                case EType.UINT8:
                case EType.UINT16:
                case EType.UINT32:
                case EType.UINT64:
                case EType.INT8:
                case EType.INT16:
                case EType.INT32:
                case EType.INT64:
                case EType.FLOAT32:
                case EType.FLOAT64:
                case EType.SELECT:
                case EType.BITFIELD:
                    return("is_number()");

                case EType.STRING:
                    return("is_string()");

                case EType.BOOLEAN:
                    return("is_boolean()");

                case EType.STRUCT:
                    return("is_object()");
                }
            }
            else if (f.ArrayType == EArrayType.DYNAMIC || f.ArrayType == EArrayType.FIXED || f.ArrayType == EArrayType.LIST)
            {
                return("is_array()");
            }
            return("ERROR");
        }
Ejemplo n.º 7
0
 private static string buildStructFieldJsonSerialization(string tab, rStructField m, string obj, string self,
                                                         List <rStruct> Structs, int nestLevel)
 {
     if (Converter.IsPOD(m.Type))
     {
         return(string.Format(tab + "{2}[\"{0}\"] = {1}{0};\n", m.Name, self, obj));
     }
     else
     {
         if (m.ArrayType == EArrayType.SCALAR)
         {
             foreach (var st in Structs)
             {
                 if (st.Name == m.TypeName)
                 {
                     var o1 = buildSubobjectSerialization(tab, st, obj, self, m, Structs, nestLevel + 1);
                     return(string.Format("{0}\n", o1));
                 }
             }
         }
         else if (m.ArrayType == EArrayType.DYNAMIC || m.ArrayType == EArrayType.FIXED || m.ArrayType == EArrayType.LIST)
         {
             foreach (var st in Structs)
             {
                 if (st.Name == m.TypeName)
                 {
                     var o1 = buildSubobjectSerialization(tab, st, obj, self, m, Structs, nestLevel + 1,
                                                          true,
                                                          m.ArrayType);
                     return(string.Format("{0}\n", o1));
                 }
             }
         }
     }
     return("ERROR");
 }
Ejemplo n.º 8
0
        private static string Subobject(string tab, rStruct str, string parentJson, string self,
                                        rStructField parent, List <rStruct> Structs, int nestLevel, bool nest = true,
                                        EArrayType array = EArrayType.SCALAR)
        {
            StringBuilder sb = new StringBuilder();

            if (!nest)
            {
                foreach (var f in str.Fields)
                {
                    sb.Append(Field(tab, f, parentJson, self, Structs, nestLevel + 1));
                }
            }
            else
            {
                if (array == EArrayType.SCALAR)
                {
                    string newSelf = string.Format("{0}{1}.", self, parent.Name);
                    string jsi     = string.Format("j{0}_it", nestLevel);
                    string jsv     = string.Format("j{0}_v", nestLevel);
                    sb.AppendLine(tab + "{");
                    sb.AppendFormat(tab + t1 + "auto {0} = {1}.find(\"{2}\");\n", jsi, parentJson, parent.Name);
                    sb.AppendFormat(tab + t1 + "if ({0} == {1}.end())\n", jsi, parentJson);
                    sb.AppendFormat(tab + t1 + t1 + "return false;\n");
                    sb.AppendFormat(tab + t1 + "auto {0} = {1}.value();\n", jsv, jsi);
                    sb.AppendLine(tab + t1 + "{");
                    foreach (var f in str.Fields)
                    {
                        sb.Append(Field(tab + t2, f, jsv, newSelf, Structs, nestLevel + 1));
                    }
                    sb.AppendLine(tab + t1 + "}");
                    sb.AppendLine(tab + "}");
                }
                else if (array == EArrayType.DYNAMIC || array == EArrayType.FIXED || array == EArrayType.LIST)
                {
                    string itr   = string.Format("i{0}", nestLevel);
                    string len   = string.Format("len{0}", nestLevel);
                    string jsi   = string.Format("j{0}", nestLevel);
                    string jsv   = string.Format("j{0}v", nestLevel);
                    string jsval = string.Format("j{0}_val", nestLevel);
                    sb.AppendLine(tab + "{");
                    sb.AppendFormat(tab + t1 + "auto {0} = {2}.find(\"{1}\");\n", jsi, parent.Name, parentJson);
                    sb.AppendFormat(tab + t1 + "if ({0} == {1}.end())\n", jsi, parentJson);
                    sb.AppendLine(tab + t1 + t1 + "return false;");
                    sb.AppendFormat(tab + t1 + "auto {0} = {1}.value();\n", jsv, jsi);
                    sb.AppendFormat(tab + t1 + "const size_t {0} = {1}.size();\n", len, jsv);
                    sb.AppendFormat(tab + t1 + "{0}{1}.resize({2});\n", self, parent.Name, len);
                    sb.AppendFormat(tab + t1 + "for (size_t {0} = 0; {0} < {1}; ++{0})\n", itr, len);
                    sb.AppendLine(tab + t1 + "{");

                    sb.AppendFormat(tab + t2 + "auto {0} = {1}[{2}];\n", jsval, jsv, itr);
                    string itrSelf = string.Format("{0}{1}[{2}].", self, parent.Name, itr);
                    foreach (var f in str.Fields)
                    {
                        sb.Append(Field(tab + t2, f, jsval, itrSelf, Structs, nestLevel + 1));
                    }

                    sb.AppendLine(tab + t1 + "}");
                    sb.AppendLine(tab + "}");
                }
            }

            return(sb.ToString());
        }
Ejemplo n.º 9
0
        private static string field_to_cpp_deserializer_type(rStructField f)
        {
            var t = f.Type;

            if (f.ArrayType == EArrayType.SCALAR)
            {
                switch (t)
                {
                case EType.UINT8:
                    return("get<u8>");

                case EType.UINT16:
                    return("get<u16>");

                case EType.UINT32:
                    return("get<u32>");

                case EType.UINT64:
                    return("get<u64>");

                case EType.INT8:
                    return("get<i8>");

                case EType.INT16:
                    return("get<i16>");

                case EType.INT32:
                    return("get<i32>");

                case EType.INT64:
                    return("get<i64>");

                case EType.FLOAT32:
                    return("get<f32>");

                case EType.FLOAT64:
                    return("get<f64>");

                case EType.SELECT:
                    return(string.Format("get<{0}>", f.TypeName));

                case EType.BITFIELD:
                    return(string.Format("get<{0}>", f.TypeName));

                case EType.STRING:
                    return("get<std::string>");

                case EType.BOOLEAN:
                    return("get<bool>");
                }
            }
            else if (f.ArrayType == EArrayType.DYNAMIC || f.ArrayType == EArrayType.FIXED || f.ArrayType == EArrayType.LIST)
            {
                switch (t)
                {
                case EType.UINT8:
                    return("get<std::vector<u8>>");

                case EType.UINT16:
                    return("get<std::vector<u16>>");

                case EType.UINT32:
                    return("get<std::vector<u32>>");

                case EType.UINT64:
                    return("get<std::vector<u64>>");

                case EType.INT8:
                    return("get<std::vector<i8>>");

                case EType.INT16:
                    return("get<std::vector<i16>>");

                case EType.INT32:
                    return("get<std::vector<i32>>");

                case EType.INT64:
                    return("get<std::vector<i64>>");

                case EType.FLOAT32:
                    return("get<std::vector<f32>>");

                case EType.FLOAT64:
                    return("get<std::vector<f64>>");

                case EType.SELECT:
                    return(string.Format("get<std::vector<{0}>>", f.TypeName));

                case EType.BITFIELD:
                    return(string.Format("get<std::vector<{0}>>", f.TypeName));

                case EType.STRING:
                    return("get<std::vector<std::string>>");

                case EType.BOOLEAN:
                    return("get<std::vector<bool>>");
                }
            }
            return("ERROR");
        }
Ejemplo n.º 10
0
        public static void ParseStructField(FieldDeclarationSyntax field,
                                            ref rStructField sfield,
                                            List <rSelect> selects,
                                            List <rStruct> structs)
        {
            var decl = field.Declaration;

            if (decl.Type is ArrayTypeSyntax)
            {
                var arrdecl = decl.Type as ArrayTypeSyntax;
                var rank    = arrdecl.RankSpecifiers;
                var r2      = rank.ToString();
                r2 = r2.Remove(0, 1);
                r2 = r2.Remove(r2.Length - 1, 1);
                if (IsListAttribute(field.AttributeLists))
                {
                    sfield.ArrayType = EArrayType.LIST;
                }
                else
                {
                    if (string.IsNullOrEmpty(r2))
                    {
                        sfield.ArrayType = EArrayType.DYNAMIC;
                    }
                    else
                    {
                        sfield.ArrayType = EArrayType.FIXED;
                        sfield.Count     = UInt32.Parse(r2);
                    }
                }

                sfield.Type     = Converter.StringToDDLType(arrdecl.ElementType.ToString(), selects, structs);
                sfield.TypeName = arrdecl.ElementType.ToString();
            }
            else
            {
                sfield.Type      = Converter.StringToDDLType(decl.Type.ToString(), selects, structs);
                sfield.TypeName  = decl.Type.ToString();
                sfield.ArrayType = EArrayType.SCALAR;
                sfield.Count     = 1;
            }

            if (decl.Variables.Count == 1)
            {
                var variable = decl.Variables[0];
                sfield.Name     = variable.Identifier.ToString();
                sfield.NameHash = MurmurHash2.Hash(sfield.Name);
                if (variable.Initializer != null)
                {
                    if (variable.Initializer.Value is LiteralExpressionSyntax)
                    {
                        sfield.Value = variable.Initializer.Value.ToString();
                    }
                    else
                    {
                        var initsyntax = (InitializerExpressionSyntax)variable.Initializer.Value;
                        foreach (var t in initsyntax.Expressions)
                        {
                            sfield.Value = t.ToString();
                        }
                    }
                }
            }
        }