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()); }
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); }
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()); }