public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value) { Vector2 vector2 = Parse(value); binaryWriter.Write(vector2.x); binaryWriter.Write(vector2.y); }
private static string GenerateDataTableStringParser(DataTableProcessor dataTableProcessor) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .AppendLine(" public override bool ParseDataRow(GameFrameworkSegment<string> dataRowSegment)") .AppendLine(" {") .AppendLine(" // Star Force 示例代码,正式项目使用时请调整此处的生成代码,以处理 GCAlloc 问题!") .AppendLine(" string[] columnTexts = dataRowSegment.Source.Substring(dataRowSegment.Offset, dataRowSegment.Length).Split(DataTableExtension.DataSplitSeparators);") .AppendLine(" for (int i = 0; i < columnTexts.Length; i++)") .AppendLine(" {") .AppendLine(" columnTexts[i] = columnTexts[i].Trim(DataTableExtension.DataTrimSeparators);") .AppendLine(" }") .AppendLine() .AppendLine(" int index = 0;"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 stringBuilder.AppendLine(" index++;"); continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = int.Parse(columnTexts[index++]);"); continue; } if (dataTableProcessor.IsSystem(i)) { string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "string") { stringBuilder.AppendFormat(" {0} = columnTexts[index++];", dataTableProcessor.GetName(i)).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = {1}.Parse(columnTexts[index++]);", dataTableProcessor.GetName(i), languageKeyword).AppendLine(); } } else { stringBuilder.AppendFormat(" {0} = DataTableExtension.Parse{1}(columnTexts[index++]);", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } } stringBuilder .AppendLine() .AppendLine(" GeneratePropertyArray();") .AppendLine(" return true;") .Append(" }"); return(stringBuilder.ToString()); }
public static void GenerateDataFile(DataTableProcessor dataTableProcessor, string dataTableName) { string binaryDataFileName = Utility.Path.GetCombinePath(DataTablePath, dataTableName + ".bytes"); if (!dataTableProcessor.GenerateDataFile(binaryDataFileName, Encoding.UTF8) && File.Exists(binaryDataFileName)) { File.Delete(binaryDataFileName); } }
public static void GenerateDataFile(DataTableProcessor dataTableProcessor, string dataTableName) { string binaryDataFileName = Utility.Path.GetRegularPath(Path.Combine(DataTablePath, dataTableName + ".bytes")); if (!dataTableProcessor.GenerateDataFile(binaryDataFileName) && File.Exists(binaryDataFileName)) { File.Delete(binaryDataFileName); } }
public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value) { Quaternion quaternion = Parse(value); binaryWriter.Write(quaternion.x); binaryWriter.Write(quaternion.y); binaryWriter.Write(quaternion.z); binaryWriter.Write(quaternion.w); }
public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value) { Color color = Parse(value); binaryWriter.Write(color.r); binaryWriter.Write(color.g); binaryWriter.Write(color.b); binaryWriter.Write(color.a); }
public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value) { Rect rect = Parse(value); binaryWriter.Write(rect.x); binaryWriter.Write(rect.y); binaryWriter.Write(rect.width); binaryWriter.Write(rect.height); }
private static void GenerateDataTables() { foreach (string dataTableName in ProcedurePreload.DataTableNames) { DataTableProcessor dataTableProcessor = DataTableGenerator.CreateDataTableProcessor(dataTableName); DataTableGenerator.GenerateDataFile(dataTableProcessor, dataTableName); DataTableGenerator.GenerateCodeFile(dataTableProcessor, dataTableName); } }
public static void GenerateCodeFile(DataTableProcessor dataTableProcessor, string dataTableName) { dataTableProcessor.SetCodeTemplate(CSharpCodeTemplateFileName, Encoding.UTF8); dataTableProcessor.SetCodeGenerator(DataTableCodeGenerator); string csharpCodeFileName = Utility.Path.GetRegularPath(Path.Combine(CSharpCodePath, "DR" + dataTableName + ".cs")); if (!dataTableProcessor.GenerateCodeFile(csharpCodeFileName, Encoding.UTF8, dataTableName) && File.Exists(csharpCodeFileName)) { File.Delete(csharpCodeFileName); } }
private static string GenerateDataTableStreamParser(DataTableProcessor dataTableProcessor) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .AppendLine(" public override bool ParseDataRow(GameFrameworkSegment<Stream> dataRowSegment)") .AppendLine(" {") .AppendLine(" Log.Warning(\"Not implemented ParseDataRow(GameFrameworkSegment<Stream>)\");") .AppendLine(" return false;") .Append(" }"); return(stringBuilder.ToString()); }
private static void DataTableCodeGenerator(DataTableProcessor dataTableProcessor, StringBuilder codeContent, object userData) { string dataTableName = (string)userData; codeContent.Replace("__DATA_TABLE_CREATE_TIME__", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); codeContent.Replace("__DATA_TABLE_NAME_SPACE__", "StarForce"); codeContent.Replace("__DATA_TABLE_CLASS_NAME__", "DR" + dataTableName); codeContent.Replace("__DATA_TABLE_COMMENT__", dataTableProcessor.GetValue(0, 1) + "。"); codeContent.Replace("__DATA_TABLE_ID_COMMENT__", "获取" + dataTableProcessor.GetComment(dataTableProcessor.IdColumn) + "。"); codeContent.Replace("__DATA_TABLE_PROPERTIES__", GenerateDataTableProperties(dataTableProcessor)); codeContent.Replace("__DATA_TABLE_PARSER__", GenerateDataTableParser(dataTableProcessor)); codeContent.Replace("__DATA_TABLE_PROPERTY_ARRAY__", GenerateDataTablePropertyArray(dataTableProcessor)); }
private static string GenerateDataTableBytesParser(DataTableProcessor dataTableProcessor) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .AppendLine(" public override bool ParseDataRow(GameFrameworkSegment<byte[]> dataRowSegment)") .AppendLine(" {") .AppendLine(" // Star Force 示例代码,正式项目使用时请调整此处的生成代码,以处理 GCAlloc 问题!") .AppendLine(" using (MemoryStream memoryStream = new MemoryStream(dataRowSegment.Source, dataRowSegment.Offset, dataRowSegment.Length, false))") .AppendLine(" {") .AppendLine(" using (BinaryReader binaryReader = new BinaryReader(memoryStream, Encoding.UTF8))") .AppendLine(" {"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = binaryReader.Read7BitEncodedInt32();"); continue; } string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "int" || languageKeyword == "uint" || languageKeyword == "long" || languageKeyword == "ulong") { stringBuilder.AppendFormat(" {0} = binaryReader.Read7BitEncoded{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = binaryReader.Read{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } } stringBuilder .AppendLine(" }") .AppendLine(" }") .AppendLine() .AppendLine(" GeneratePropertyArray();") .AppendLine(" return true;") .Append(" }"); return(stringBuilder.ToString()); }
private static void DataTableCodeGenerator(DataTableProcessor dataTableProcessor, StringBuilder codeContent, object userData) { Data data = (Data)userData; codeContent.Replace("__DATA_TABLE_CREATE_TIME__", data.CreateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")); codeContent.Replace("__DATA_TABLE_NAME_SPACE__", data.NameSpace); codeContent.Replace("__DATA_TABLE_CLASS_NAME__", data.ClassName); codeContent.Replace("__DATA_TABLE_COMMENT__", dataTableProcessor.GetValue(0, 1) + "。"); codeContent.Replace("__DATA_TABLE_ID_COMMENT__", "获取" + dataTableProcessor.GetComment(dataTableProcessor.IdColumn) + "。"); codeContent.Replace("__DATA_TABLE_PROPERTIES__", GenerateDataTableProperties(dataTableProcessor, data)); codeContent.Replace("__DATA_TABLE_PROPERTY_ARRAY__", GenerateDataTablePropertyArray(dataTableProcessor, data)); codeContent.Replace("__DATA_TABLE_STRING_PARSER__", GenerateDataTableStringParser(dataTableProcessor, data)); codeContent.Replace("__DATA_TABLE_BYTES_PARSER__", GenerateDataTableBytesParser(dataTableProcessor, data)); codeContent.Replace("__DATA_TABLE_STREAM_PARSER__", GenerateDataTableStreamParser(dataTableProcessor, data)); }
private static string GenerateDataTableStringParser(DataTableProcessor dataTableProcessor, Data data) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .AppendLine(" public override bool ParseDataRow(GameFrameworkSegment<string> dataRowSegment)") .AppendLine(" {") .AppendLine(" string[] text = DataTableExtension.SplitDataRow(dataRowSegment);") .AppendLine(" int index = 0;"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 stringBuilder.AppendLine(" index++;"); continue; } if (i == dataTableProcessor.IdColumn) { // 编号列 stringBuilder.AppendLine(" m_Id = int.Parse(text[index++]);"); continue; } string standardType = dataTableProcessor.GetStandardType(i); switch (standardType) { case "string": stringBuilder.AppendFormat(" {0} = text[index++];", dataTableProcessor.GetName(i)).AppendLine(); break; default: stringBuilder.AppendFormat(" {0} = {1}.Parse(text[index++]);", dataTableProcessor.GetName(i), standardType).AppendLine(); break; } } stringBuilder .AppendLine() .AppendLine(" return true;") .Append(" }"); return(stringBuilder.ToString()); }
private static void GenerateDataTables() { foreach (string dataTableName in ProcedurePreload.DataTableNames) { DataTableProcessor dataTableProcessor = DataTableGenerator.CreateDataTableProcessor(dataTableName); if (!DataTableGenerator.CheckRawData(dataTableProcessor, dataTableName)) { Debug.LogError(Utility.Text.Format("Check raw data failure. DataTableName='{0}'", dataTableName)); break; } DataTableGenerator.GenerateDataFile(dataTableProcessor, dataTableName); DataTableGenerator.GenerateCodeFile(dataTableProcessor, dataTableName); } AssetDatabase.Refresh(); }
public static void GenerateCodeFile(DataTableProcessor dataTableProcessor, string dataTableName) { dataTableProcessor.SetCodeTemplate(CSharpCodeTemplateFileName, Encoding.UTF8); dataTableProcessor.SetCodeGenerator(DataTableCodeGenerator); string csharpCodeFileName = Utility.Path.GetCombinePath(CSharpCodePath, "DR" + dataTableName + ".cs"); Data data = new Data() { CreateTime = DateTime.Now, NameSpace = "StarForce", ClassName = "DR" + dataTableName, }; if (!dataTableProcessor.GenerateCodeFile(csharpCodeFileName, Encoding.UTF8, data) && File.Exists(csharpCodeFileName)) { File.Delete(csharpCodeFileName); } }
public static bool CheckRawData(DataTableProcessor dataTableProcessor, string dataTableName) { for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { string name = dataTableProcessor.GetName(i); if (string.IsNullOrEmpty(name) || name == "#") { continue; } if (!NameRegex.IsMatch(name)) { Debug.LogWarning(Utility.Text.Format("Check raw data failure. DataTableName='{0}' Name='{1}'", dataTableName, name)); return(false); } } return(true); }
private static string GenerateDataTableProperties(DataTableProcessor dataTableProcessor) { StringBuilder stringBuilder = new StringBuilder(); bool firstProperty = true; for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 continue; } if (firstProperty) { firstProperty = false; } else { stringBuilder.AppendLine().AppendLine(); } stringBuilder .AppendLine(" /// <summary>") .AppendFormat(" /// 获取{0}。", dataTableProcessor.GetComment(i)).AppendLine() .AppendLine(" /// </summary>") .AppendFormat(" public {0} {1}", dataTableProcessor.GetLanguageKeyword(i), dataTableProcessor.GetName(i)).AppendLine() .AppendLine(" {") .AppendLine(" get;") .AppendLine(" private set;") .Append(" }"); } return(stringBuilder.ToString()); }
public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value) { binaryWriter.Write7BitEncodedInt32(Parse(value)); }
private static string GenerateDataTableParser(DataTableProcessor dataTableProcessor) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .AppendLine(" public override bool ParseDataRow(GameFrameworkDataSegment dataRowSegment, object dataTableUserData)") .AppendLine(" {") .AppendLine(" Type dataType = dataRowSegment.DataType;") .AppendLine(" if (dataType == typeof(string))") .AppendLine(" {") .AppendLine(" string[] columnTexts = ((string)dataRowSegment.Data).Substring(dataRowSegment.Offset, dataRowSegment.Length).Split(DataTableExtension.DataSplitSeparators);") .AppendLine(" for (int i = 0; i < columnTexts.Length; i++)") .AppendLine(" {") .AppendLine(" columnTexts[i] = columnTexts[i].Trim(DataTableExtension.DataTrimSeparators);") .AppendLine(" }") .AppendLine() .AppendLine(" int index = 0;"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 stringBuilder.AppendLine(" index++;"); continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = int.Parse(columnTexts[index++]);"); continue; } if (dataTableProcessor.IsSystem(i)) { string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "string") { stringBuilder.AppendFormat(" {0} = columnTexts[index++];", dataTableProcessor.GetName(i)).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = {1}.Parse(columnTexts[index++]);", dataTableProcessor.GetName(i), languageKeyword).AppendLine(); } } else { stringBuilder.AppendFormat(" {0} = DataTableExtension.Parse{1}(columnTexts[index++]);", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } } stringBuilder .AppendLine(" }") .AppendLine(" else if (dataType == typeof(byte[]))") .AppendLine(" {") .AppendLine(" string[] strings = (string[])dataTableUserData;") .AppendLine(" using (MemoryStream memoryStream = new MemoryStream((byte[])dataRowSegment.Data, dataRowSegment.Offset, dataRowSegment.Length, false))") .AppendLine(" {") .AppendLine(" using (BinaryReader binaryReader = new BinaryReader(memoryStream, Encoding.UTF8))") .AppendLine(" {"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = binaryReader.Read7BitEncodedInt32();"); continue; } string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "int" || languageKeyword == "uint" || languageKeyword == "long" || languageKeyword == "ulong") { stringBuilder.AppendFormat(" {0} = binaryReader.Read7BitEncoded{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } else if (languageKeyword == "string") { stringBuilder.AppendFormat(" {0} = strings[binaryReader.Read7BitEncodedInt32()];", dataTableProcessor.GetName(i)).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = binaryReader.Read{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } } stringBuilder .AppendLine(" }") .AppendLine(" }") .AppendLine(" }") .AppendLine(" else") .AppendLine(" {") .AppendLine(" Log.Warning(\"Can not parse data row which type '{0}' is invalid.\", dataType.FullName);") .AppendLine(" return false;") .AppendLine(" }") .AppendLine() .AppendLine(" GeneratePropertyArray();") .AppendLine(" return true;") .Append(" }"); return(stringBuilder.ToString()); }
private static string GenerateDataTablePropertyArray(DataTableProcessor dataTableProcessor, Data data) { Dictionary <string, string> propertyType = new Dictionary <string, string>(); Dictionary <string, List <KeyValuePair <int, string> > > propertyArray = new Dictionary <string, List <KeyValuePair <int, string> > >(); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 continue; } if (i == dataTableProcessor.IdColumn) { // 编号列 continue; } string name = dataTableProcessor.GetName(i); if (!EndWithNumberRegex.IsMatch(name)) { continue; } string arrayName = EndWithNumberRegex.Replace(name, string.Empty); int id = int.Parse(EndWithNumberRegex.Match(name).Value); List <KeyValuePair <int, string> > property = null; if (!propertyArray.TryGetValue(arrayName, out property)) { propertyType.Add(arrayName, dataTableProcessor.GetStandardType(i)); property = new List <KeyValuePair <int, string> >(); propertyArray.Add(arrayName, property); } property.Add(new KeyValuePair <int, string>(id, name)); } StringBuilder stringBuilder = new StringBuilder(); foreach (KeyValuePair <string, List <KeyValuePair <int, string> > > i in propertyArray) { stringBuilder .AppendFormat(" private KeyValuePair<int, {0}>[] m_{1} = null;", propertyType[i.Key], i.Key).AppendLine() .AppendFormat(" public int Get{0}(int id)", i.Key).AppendLine() .AppendLine(" {") .AppendFormat(" foreach (KeyValuePair<int, {0}> i in m_{1})", propertyType[i.Key], i.Key).AppendLine() .AppendLine(" {") .AppendLine(" if (i.Key == id)") .AppendLine(" {") .AppendFormat(" return i.Value;", propertyType[i.Key], i.Key).AppendLine() .AppendLine(" }") .AppendLine(" }") .AppendLine() .AppendFormat(" throw new GameFrameworkException(Utility.Text.Format(\"Invalid id '{{0}}' for {0}.\", id.ToString()));", i.Key).AppendLine() .AppendLine(" }"); } return(stringBuilder.ToString()); }
private static string GenerateDataTablePropertyArray(DataTableProcessor dataTableProcessor) { List <PropertyCollection> propertyCollections = new List <PropertyCollection>(); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 continue; } string name = dataTableProcessor.GetName(i); if (!EndWithNumberRegex.IsMatch(name)) { continue; } string propertyCollectionName = EndWithNumberRegex.Replace(name, string.Empty); int id = int.Parse(EndWithNumberRegex.Match(name).Value); PropertyCollection propertyCollection = null; foreach (PropertyCollection pc in propertyCollections) { if (pc.Name == propertyCollectionName) { propertyCollection = pc; break; } } if (propertyCollection == null) { propertyCollection = new PropertyCollection(propertyCollectionName, dataTableProcessor.GetLanguageKeyword(i)); propertyCollections.Add(propertyCollection); } propertyCollection.AddItem(id, name); } StringBuilder stringBuilder = new StringBuilder(); bool firstProperty = true; foreach (PropertyCollection propertyCollection in propertyCollections) { if (firstProperty) { firstProperty = false; } else { stringBuilder.AppendLine().AppendLine(); } stringBuilder .AppendFormat(" private KeyValuePair<int, {1}>[] m_{0} = null;", propertyCollection.Name, propertyCollection.LanguageKeyword).AppendLine() .AppendLine() .AppendFormat(" public int {0}Count", propertyCollection.Name).AppendLine() .AppendLine(" {") .AppendLine(" get") .AppendLine(" {") .AppendFormat(" return m_{0}.Length;", propertyCollection.Name).AppendLine() .AppendLine(" }") .AppendLine(" }") .AppendLine() .AppendFormat(" public {1} Get{0}(int id)", propertyCollection.Name, propertyCollection.LanguageKeyword).AppendLine() .AppendLine(" {") .AppendFormat(" foreach (KeyValuePair<int, {1}> i in m_{0})", propertyCollection.Name, propertyCollection.LanguageKeyword).AppendLine() .AppendLine(" {") .AppendLine(" if (i.Key == id)") .AppendLine(" {") .AppendLine(" return i.Value;") .AppendLine(" }") .AppendLine(" }") .AppendLine() .AppendFormat(" throw new GameFrameworkException(Utility.Text.Format(\"Get{0} with invalid id '{{0}}'.\", id.ToString()));", propertyCollection.Name).AppendLine() .AppendLine(" }") .AppendLine() .AppendFormat(" public {1} Get{0}At(int index)", propertyCollection.Name, propertyCollection.LanguageKeyword).AppendLine() .AppendLine(" {") .AppendFormat(" if (index < 0 || index >= m_{0}.Length)", propertyCollection.Name).AppendLine() .AppendLine(" {") .AppendFormat(" throw new GameFrameworkException(Utility.Text.Format(\"Get{0}At with invalid index '{{0}}'.\", index.ToString()));", propertyCollection.Name).AppendLine() .AppendLine(" }") .AppendLine() .AppendFormat(" return m_{0}[index].Value;", propertyCollection.Name).AppendLine() .Append(" }"); } if (propertyCollections.Count > 0) { stringBuilder.AppendLine().AppendLine(); } stringBuilder .AppendLine(" private void GeneratePropertyArray()") .AppendLine(" {"); firstProperty = true; foreach (PropertyCollection propertyCollection in propertyCollections) { if (firstProperty) { firstProperty = false; } else { stringBuilder.AppendLine().AppendLine(); } stringBuilder .AppendFormat(" m_{0} = new KeyValuePair<int, {1}>[]", propertyCollection.Name, propertyCollection.LanguageKeyword).AppendLine() .AppendLine(" {"); int itemCount = propertyCollection.ItemCount; for (int i = 0; i < itemCount; i++) { KeyValuePair <int, string> item = propertyCollection.GetItem(i); stringBuilder.AppendFormat(" new KeyValuePair<int, {0}>({1}, {2}),", propertyCollection.LanguageKeyword, item.Key.ToString(), item.Value).AppendLine(); } stringBuilder.Append(" };"); } stringBuilder .AppendLine() .Append(" }"); return(stringBuilder.ToString()); }
private static string GenerateDataTableParser(DataTableProcessor dataTableProcessor) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .AppendLine(" public override bool ParseDataRow(string dataRowString, object userData)") .AppendLine(" {") .AppendLine(" string[] columnStrings = dataRowString.Split(DataTableExtension.DataSplitSeparators);") .AppendLine(" for (int i = 0; i < columnStrings.Length; i++)") .AppendLine(" {") .AppendLine(" columnStrings[i] = columnStrings[i].Trim(DataTableExtension.DataTrimSeparators);") .AppendLine(" }") .AppendLine() .AppendLine(" int index = 0;"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 stringBuilder.AppendLine(" index++;"); continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = int.Parse(columnStrings[index++]);"); continue; } if (dataTableProcessor.IsSystem(i)) { string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "string") { stringBuilder.AppendFormat(" {0} = columnStrings[index++];", dataTableProcessor.GetName(i)).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = {1}.Parse(columnStrings[index++]);", dataTableProcessor.GetName(i), languageKeyword).AppendLine(); } } else { stringBuilder.AppendFormat(" {0} = DataTableExtension.Parse{1}(columnStrings[index++]);", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } } stringBuilder.AppendLine() .AppendLine(" GeneratePropertyArray();") .AppendLine(" return true;") .AppendLine(" }") .AppendLine() .AppendLine(" public override bool ParseDataRow(byte[] dataRowBytes, int startIndex, int length, object userData)") .AppendLine(" {") .AppendLine(" using (MemoryStream memoryStream = new MemoryStream(dataRowBytes, startIndex, length, false))") .AppendLine(" {") .AppendLine(" using (BinaryReader binaryReader = new BinaryReader(memoryStream, Encoding.UTF8))") .AppendLine(" {"); for (int i = 0; i < dataTableProcessor.RawColumnCount; i++) { if (dataTableProcessor.IsCommentColumn(i)) { // 注释列 continue; } if (dataTableProcessor.IsIdColumn(i)) { // 编号列 stringBuilder.AppendLine(" m_Id = binaryReader.Read7BitEncodedInt32();"); continue; } string languageKeyword = dataTableProcessor.GetLanguageKeyword(i); if (languageKeyword == "int" || languageKeyword == "uint" || languageKeyword == "long" || languageKeyword == "ulong") { stringBuilder.AppendFormat(" {0} = binaryReader.Read7BitEncoded{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } else { stringBuilder.AppendFormat(" {0} = binaryReader.Read{1}();", dataTableProcessor.GetName(i), dataTableProcessor.GetType(i).Name).AppendLine(); } } stringBuilder .AppendLine(" }") .AppendLine(" }") .AppendLine() .AppendLine(" GeneratePropertyArray();") .AppendLine(" return true;") .Append(" }"); return(stringBuilder.ToString()); }
public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value) { }
public abstract void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value);
public override void WriteToStream(DataTableProcessor dataTableProcessor, BinaryWriter binaryWriter, string value) { binaryWriter.Write(Parse(value).Ticks); }