public void DemoStructs() { StructEntity structEntity = new StructEntity(); structEntity.getValues(1, "Title1", "Author1", "Subject1"); structEntity.Display(); }
public override StructEntity <T> ParseFromXml(XElement node) { var se = new StructEntity <T>(); UpdateFromFragment(node, se); return(se); }
public string StructToString(StructEntity entity, int tableNum) { StringBuilder sb = new StringBuilder(); sb.NewLine(tableNum).Append("[Serializable]"); sb.NewLine(tableNum); sb.AppendFormat("public partial class {0} : Sdp.IStruct", entity.Name.Value); if (entity.IsMessage) { sb.Append(", Sdp.IMessage"); } sb.NewLine(tableNum).Append('{'); if (entity.Fields.Count > 0) { sb.NewLine(tableNum + 1).Append("[NonSerialized]"); sb.NewLine(tableNum + 1).Append("private static readonly string[] _member_name_ = new string[] { "); for (int i = 0; i < entity.Fields.Count; ++i) { sb.AppendFormat("\"{0}\"", entity.Fields[i].Name.Value); if (i < entity.Fields.Count - 1) { sb.Append(", "); } } sb.Append(" };"); sb.NewLine(); } foreach (var field in entity.Fields) { sb.NewLine(tableNum + 1).Append(StructFieldToMemberString(field)).NewLine(); } sb.NewLine(); if (entity.IsMessage) { var msgEntity = (MessageEnity)entity; sb.NewLine(tableNum + 1).Append("public int ID(){ return ").Append(MsgIdToString(msgEntity.ID)).Append("; }"); sb.NewLine(); } sb.NewLine(tableNum + 1).Append("public void Visit(Sdp.ISdp sdp)"); sb.NewLine(tableNum + 1).Append('{'); for (int i = 0; i < entity.Fields.Count; ++i) { var fd = entity.Fields[i]; if (fd.Type.TypeType == FieldType.Enum) { sb.NewLine(tableNum + 2).AppendFormat("sdp.VisitEunm({0}, _member_name_[{1}], false, ref {2});", fd.Index.Value, i, fd.Name.Value); } else if (fd.Type.TypeType == FieldType.Map || fd.Type.TypeType == FieldType.Vector) { sb.NewLine(tableNum + 2).AppendFormat("sdp.Visit({0}, _member_name_[{1}], false, {2});", fd.Index.Value, i, fd.Name.Value); } else { sb.NewLine(tableNum + 2).AppendFormat("sdp.Visit({0}, _member_name_[{1}], false, ref {2});", fd.Index.Value, i, fd.Name.Value); } } sb.NewLine(tableNum + 1).Append("}"); sb.NewLine(tableNum).Append("}"); sb.NewLine(); return(sb.ToString()); }
public override bool UpdateFromFragment(XElement node, StructEntity <T> entity) { GeneratedParsers["data"](entity, node.Value); return(true); }
public override bool UpdateFromFragment(XElement node, StructEntity <TP> entity) { entity.Data = _parseFunc(node.Value.Trim()); return(true); }
public static string StructToFile(StructEntity entity, string nameSpace) { StringBuilder sb = new StringBuilder(); //生成文件头 sb.Append("//本文件由工具生成,请勿直接修改").NewLine(); sb.Append("#pragma once").NewLine(); sb.Append("#include <string>").NewLine(); sb.Append("#include <vector>").NewLine(); sb.Append("#include <map>").NewLine(); sb.Append("#include <algorithm>").NewLine(); //生成头文件引用 foreach (var type in entity.IncludeCustomType) { sb.AppendFormat("#include \"{0}\"", TypeToFileName(type, nameSpace)).NewLine(); } int tableCount = 0; if (!string.IsNullOrEmpty(nameSpace)) { sb.Append("namespace ").Append(nameSpace).NewLine().Append('{').NewLine(); tableCount = 1; } //生成结构体 sb.AppendTable(tableCount).AppendFormat("struct {0}", entity.Name.Value).NewLine(); sb.AppendTable(tableCount).Append('{').NewLine(); //生成字段 foreach (var field in entity.Fields) { sb.AppendTable(tableCount + 1).AppendField(field).NewLine(); } sb.NewLine(); //生成构造函数 sb.AppendTable(tableCount + 1).AppendFormat("{0}() = default;", entity.Name.Value).NewLine(); sb.AppendTable(tableCount + 1).AppendFormat("const char *getName() const {0} return \"{1}\"; {2} ", '{', entity.Name.Value, '}').NewLine(); //反序列化接口 sb.AppendTable(tableCount + 1).Append("template <typename T>").NewLine(); sb.AppendTable(tableCount + 1).Append("void visit(T &t, bool )").NewLine(); sb.AppendTable(tableCount + 1).Append('{').NewLine(); foreach (var field in entity.Fields) { if (field.Type.TypeType == FieldType.Enum) { sb.AppendTable(tableCount + 2).AppendFormat("t.visit({0}, false, \"{1}\", (int&){1});", field.Index.IntValue, field.Name.Value).NewLine(); } else { sb.AppendTable(tableCount + 2).AppendFormat("t.visit({0}, false, \"{1}\", {1});", field.Index.IntValue, field.Name.Value).NewLine(); } } sb.AppendTable(tableCount + 1).Append('}').NewLine(); //只读序列化接口 sb.AppendTable(tableCount + 1).Append("template <typename T>").NewLine(); sb.AppendTable(tableCount + 1).Append("void visit(T &t, bool ) const").NewLine(); sb.AppendTable(tableCount + 1).Append('{').NewLine(); foreach (var field in entity.Fields) { if (field.Type.TypeType == FieldType.Enum) { sb.AppendTable(tableCount + 2).AppendFormat("t.visit({0}, false, \"{1}\", (int&){1});", field.Index.IntValue, field.Name.Value).NewLine(); } else { sb.AppendTable(tableCount + 2).AppendFormat("t.visit({0}, false, \"{1}\", {1});", field.Index.IntValue, field.Name.Value).NewLine(); } } sb.AppendTable(tableCount + 1).Append('}').NewLine(); //swap sb.AppendTable(tableCount + 1).AppendFormat("void swap({0} &b)", entity.Name.Value).NewLine(); sb.AppendTable(tableCount + 1).Append('{').NewLine(); foreach (var field in entity.Fields) { sb.AppendTable(tableCount + 2).AppendFormat("std::swap({0}, b.{0});", field.Name.Value).NewLine(); } //比较操作符 sb.AppendTable(tableCount + 1).AppendFormat("bool operator== (const {0} &rhs) const", entity.Name.Value).NewLine(); sb.AppendTable(tableCount + 1).Append('{').NewLine(); for (int i = 0; i < entity.Fields.Count; ++i) { sb.AppendTable(tableCount + 2); if (i == 0) { sb.Append("return "); } else { sb.AppendTable(1).Append("&& "); } sb.AppendFormat("{0} == rhs.{0}", entity.Fields[i].Name.Value); if (i == entity.Fields.Count - 1) { sb.Append(';'); } sb.NewLine(); } sb.AppendTable(tableCount + 1).Append('}').NewLine(); sb.AppendTable(tableCount + 1).AppendFormat("bool operator!= (const {0} &rhs) const", entity.Name.Value).NewLine(); sb.AppendTable(tableCount + 1).Append('{').NewLine(); sb.AppendTable(tableCount + 2).Append("return !((*this) == rhs);").NewLine(); sb.AppendTable(tableCount + 1).Append('}').NewLine(); //结构体结束 sb.AppendTable(tableCount).Append('}').NewLine(); //命名空间结束 if (!string.IsNullOrEmpty(nameSpace)) { sb.Append('}').NewLine(); } //生成swap sb.Append("namespace std").NewLine(); sb.Append('{').NewLine(); sb.AppendTable(1).Append("inline void swap("); if (!string.IsNullOrEmpty(nameSpace)) { sb.Append(nameSpace).Append("::"); } sb.Append(entity.Name.Value).Append(" &a, "); if (!string.IsNullOrEmpty(nameSpace)) { sb.Append(nameSpace).Append("::"); } sb.Append(entity.Name.Value).Append(" &b) "); sb.Append('{').Append(" a.swap(b); ").Append('}').NewLine(); sb.Append('}').NewLine(); return(sb.ToString()); }
/// <summary> /// 更新 /// </summary> /// <param name="entity">更新</param> /// <returns></returns> public int Update(StructEntity entity) { return(baseRepository.Update(entity)); }
/// <summary> /// 新增 /// </summary> /// <param name="entity">新增实体</param> /// <returns></returns> public int Insert(StructEntity entity) { return(baseRepository.Insert(entity)); }
/// <summary> /// 删除 /// </summary> /// <param name="entity">删除实体</param> /// <returns></returns> public int Delete(StructEntity entity) { return(baseRepository.Delete(entity)); }
public static string StructToFile(StructEntity entity, string nameSpace) { StringBuilder sb = new StringBuilder(); //生成文件头 sb.Append("//本文件由工具生成,请勿直接修改").NewLine(); sb.Append("using System;").NewLine(); sb.Append("using System.Collections.Generic;").NewLine(); int tableCount = 0; if (!string.IsNullOrEmpty(nameSpace)) { sb.Append("namespace ").Append(nameSpace).NewLine().Append('{').NewLine(); tableCount = 1; } //生成类 sb.NewLine().AppendTable(tableCount).Append("[Serializable]").NewLine(); sb.AppendTable(tableCount).AppendFormat("public partial class {0} : Sdp.IStruct", entity.Name.Value).NewLine(); sb.AppendTable(tableCount).Append('{').NewLine(); //生成字段 foreach (var field in entity.Fields) { sb.AppendTable(tableCount + 1).AppendField(field).NewLine(); } sb.NewLine(); //生成序列化接口 sb.AppendTable(tableCount + 1).Append("public void Visit(Sdp.ISdp sdp)").NewLine(); sb.AppendTable(tableCount + 1).Append('{').NewLine(); foreach (var field in entity.Fields) { sb.AppendTable(tableCount + 2); if (field.Type.TypeType == FieldType.Enum) { sb.AppendFormat("sdp.VisitEunm({0}, \"{1}\", false, ref {1});", field.Index.IntValue, field.Name.Value); } else if (field.Type.TypeType == FieldType.Struct) { sb.AppendFormat("sdp.VisitStruct({0}, \"{1}\", false, ref {1});", field.Index.IntValue, field.Name.Value); } else if (field.Type.TypeType == FieldType.Vector) { sb.AppendFormat("sdp.VisitList({0}, \"{1}\", false, ref {1});", field.Index.IntValue, field.Name.Value); } else if (field.Type.TypeType == FieldType.Map) { sb.AppendFormat("sdp.VisitMap({0}, \"{1}\", false, ref {1});", field.Index.IntValue, field.Name.Value); } else { sb.AppendFormat("sdp.Visit({0}, \"{1}\", false, ref {1});", field.Index.IntValue, field.Name.Value); } sb.NewLine(); } sb.AppendTable(tableCount + 1).Append('}').NewLine(); sb.AppendTable(tableCount).Append('}').NewLine(); if (!string.IsNullOrEmpty(nameSpace)) { sb.Append('}').NewLine(); } return(sb.ToString()); }