Пример #1
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());
        }
Пример #2
0
        public Mono.Cecil.TypeDefinition GetArrayType(EArrayType type)
        {
            var assembly = m_mod.ImportReference(typeof(EObject)).Resolve().Module;
            var intarray = assembly.Types.FirstOrDefault(x => x.Name == "Array" + type.ToString());

            Debug.Assert(intarray != null);

            return(intarray);
        }
Пример #3
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());
        }