Example #1
0
        public void DemoStructs()
        {
            StructEntity structEntity = new StructEntity();

            structEntity.getValues(1, "Title1", "Author1", "Subject1");
            structEntity.Display();
        }
Example #2
0
        public override StructEntity <T> ParseFromXml(XElement node)
        {
            var se = new StructEntity <T>();

            UpdateFromFragment(node, se);
            return(se);
        }
Example #3
0
        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());
        }
Example #4
0
 public override bool UpdateFromFragment(XElement node, StructEntity <T> entity)
 {
     GeneratedParsers["data"](entity, node.Value);
     return(true);
 }
Example #5
0
 public override bool UpdateFromFragment(XElement node, StructEntity <TP> entity)
 {
     entity.Data = _parseFunc(node.Value.Trim());
     return(true);
 }
Example #6
0
        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));
 }
Example #10
0
        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());
        }