//导出类型的序列化辅助函数 public static string ExportHelperFunctionClass(ClassDefine helperClass, List <string> types, Language language) { HashSet <string> allItertorType = new HashSet <string>(); foreach (string type in types) { if (!allItertorType.Contains(type)) { allItertorType.Add(type); } List <string> nestTypes = GetAllNestType(type); foreach (string nestType in nestTypes) { if (!allItertorType.Contains(nestType)) { allItertorType.Add(nestType); } } FieldDefine fd = new FieldDefine(); fd.decoration = type; helperClass.fieldList.Add(fd); } StringBuilder sb = new StringBuilder(); ExportClassHelper.indent = 0; bool hasLeftBrace = ExportClassHelper.ExportNamespace(sb, helperClass, language); ExportClassHelper.ExportClassName(sb, helperClass, language); ExportClassHelper.AddLeftBrace(sb, language); //function sb.AppendLine(""); foreach (var type in allItertorType) { string function = CodeExporterHelper.GenerateFunctionCode(language, type, CodeMode.Decode); if (!string.IsNullOrEmpty(function)) { sb.AppendIndentLine(function); } if (ExportConfigConstant.GenerateSerializeCode) { function = CodeExporterHelper.GenerateFunctionCode(language, type, CodeMode.Encode); if (!string.IsNullOrEmpty(function)) { sb.AppendIndentLine(function); } } } sb.AppendLine(""); //class end ExportClassHelper.AddRightBrace(sb, language); //namespace end if (hasLeftBrace) { ExportClassHelper.AddRightBrace(sb, language); } return(sb.ToString()); }
//Class Layout //namespace //class //member,constructor //function:Encode,Decode,ToString public override string ExportCode(Language lanaguage, FieldType fieldType) { StringBuilder sb = new StringBuilder(); ExportClassHelper.indent = 0; bool hasLeftBrace = ExportClassHelper.ExportNamespace(sb, this, lanaguage); ExportClassHelper.ExportClassName(sb, this, lanaguage); ExportClassHelper.AddLeftBrace(sb, lanaguage); ExportClassHelper.ExportClassMember(sb, this, lanaguage); ExportClassHelper.ExportDecodeFunction(sb, this, lanaguage); ExportClassHelper.ExportEncodeFunction(sb, this, lanaguage); //ExportClassHelper.ExportToStringFunction(sb, this, lanaguage); //class end ExportClassHelper.AddRightBrace(sb, lanaguage); //namespace end if (hasLeftBrace) { ExportClassHelper.AddRightBrace(sb, lanaguage); } return(sb.ToString()); }
public static string ExportConfigDeserializeClass(ClassDefine deserializerClass, List <string> types, Language language) { StringBuilder sb = new StringBuilder(); ExportClassHelper.indent = 0; FieldDefine fd = new FieldDefine(); fd.decoration = "Dictionary<int,object>"; deserializerClass.fieldList.Add(fd); bool hasLeftBrace = ExportClassHelper.ExportNamespace(sb, deserializerClass, language); ExportClassHelper.ExportClassName(sb, deserializerClass, language); ExportClassHelper.AddLeftBrace(sb, language); sb.AppendLine(""); if (language == Language.CSharp) { sb.AppendIndentLine("public static void Deserialize(BufferBuilder bb)"); } else if (language == Language.Java) { } ExportClassHelper.AddLeftBrace(sb, language); foreach (var type in types) { sb.AppendIndentLine(type + ".LoadTable(bb);"); } ExportClassHelper.AddRightBrace(sb, language); //class end ExportClassHelper.AddRightBrace(sb, language); //namespace end if (hasLeftBrace) { ExportClassHelper.AddRightBrace(sb, language); } return(sb.ToString()); }
//旧版本 public static string ExportDeserializeClass(ClassDefine deserializerClass, List <string> types, Language language) { StringBuilder sb = new StringBuilder(); ExportClassHelper.indent = 0; FieldDefine fd = new FieldDefine(); fd.decoration = "Dictionary<int,object>"; deserializerClass.fieldList.Add(fd); bool hasLeftBrace = ExportClassHelper.ExportNamespace(sb, deserializerClass, language); ExportClassHelper.ExportClassName(sb, deserializerClass, language); ExportClassHelper.AddLeftBrace(sb, language); sb.AppendLine(""); if (language == Language.CSharp) { sb.AppendIndentLine("public static Dictionary<string,Dictionary<int,object>> Deserialize(BufferBuilder bb)"); } else if (language == Language.Java) { sb.AppendIndentLine("public Dictionary<string,Dictionary<int,object>> deserialize(BufferBuilder bb)"); } ExportClassHelper.AddLeftBrace(sb, language); sb.AppendIndentLine("Dictionary<string,Dictionary<int,object>> valueDicts= new Dictionary<string,Dictionary<int,object>>();"); sb.AppendIndentLine("Dictionary<int,object> valueDict;"); foreach (var type in types) { string elementType = CodeExporterHelper.GetArrayElementTypeName(type); sb.AppendIndentLine("valueDict = new Dictionary<int,object>();"); string valuesName = elementType + "Values"; string function = CodeExporterHelper.GetFunctionStatement(language, CodeMode.Decode, type, valuesName, true); if (!string.IsNullOrEmpty(function)) { sb.AppendIndentLine(type + " " + function); } sb.AppendIndentLine("for(int i=0;i<" + valuesName + ".Length;i++)"); ExportClassHelper.AddLeftBrace(sb, language); if (type.Contains("GlobalConfig")) { sb.AppendIndentLine("valueDict.Add(i+1," + valuesName + "[i]);"); } else { sb.AppendIndentLine("valueDict.Add(" + valuesName + "[i].id," + valuesName + "[i]);"); } ExportClassHelper.AddRightBrace(sb, language); sb.AppendIndentLine("valueDicts.Add(\"" + elementType + "\",valueDict);"); } sb.AppendLine(""); sb.AppendIndentLine("return valueDicts;"); ExportClassHelper.AddRightBrace(sb, language); //class end ExportClassHelper.AddRightBrace(sb, language); //namespace end if (hasLeftBrace) { ExportClassHelper.AddRightBrace(sb, language); } return(sb.ToString()); }