public void VisitRoot(RootNode node, string nameSpace, TextBuilder builder) { VisitHeader(node.Header, nameSpace, builder); VisitReadPart(node.ReadPart, builder); builder.EmptyLine(); VisitWritePart(node.WritePart, builder); FinishVisitHeader(node.Header, builder); }
protected virtual void VisitReadPart(ReadPartNode node, TextBuilder builder) { builder.WriteLine("object IConfigSerializer.Read(IBinaryReader reader, object o)"); builder.LeftPar(); builder.Indent(); builder.WriteLine("return Read(reader, ({0})o);", node.TypeName); builder.UnIndent(); builder.RightPar(); builder.EmptyLine(); builder.WriteLine("public static {0} Read(IBinaryReader o, {0} d)", node.TypeName); builder.LeftPar(); builder.Indent(); if (!node.Type.IsValueType) { builder.WriteLine("if(o.ReadBoolean() == false) return null;"); builder.EmptyLine(); } var root = node.Parent as RootNode; if (root != null && root.CustomSerializeParams != null) { AppendReadFromCustom("o", root.CustomSerializeParams, builder); } else { AppendReadPart(node, builder); } builder.WriteLine("return d;"); builder.UnIndent(); builder.RightPar(); }
protected virtual void VisitWritePart(WritePartNode node, TextBuilder builder) { builder.WriteLine("void IConfigSerializer.Write(IBinaryWriter writer, object o)"); builder.LeftPar(); builder.Indent(); builder.WriteLine("Write(writer, ({0})o);", node.TypeName); builder.UnIndent(); builder.RightPar(); builder.EmptyLine(); builder.WriteLine("public static void Write(IBinaryWriter o, {0} d)", node.TypeName); builder.LeftPar(); builder.Indent(); if (!node.Type.IsValueType) { builder.WriteLine("o.Write(d != null);"); builder.WriteLine("if(d == null) return;"); builder.EmptyLine(); } var root = node.Parent as RootNode; if (root != null && root.CustomSerializeParams != null) { AppendWriteFromCustom("o", root.CustomSerializeParams, builder); } else { AppendWritePart(node, builder); } builder.UnIndent(); builder.RightPar(); }
protected virtual void VisitHeader(TypeNode node, string nameSpace, TextBuilder builder) { builder.WriteLine("// Auto generated code"); builder.WriteLine("using Kernel;"); builder.WriteLine("using Kernel.Config;"); builder.WriteLine("using Kernel.Util;"); builder.WriteLine("using System;"); builder.WriteLine("using System.IO;"); builder.EmptyLine(); builder.WriteLine("namespace {0}", nameSpace); builder.LeftPar(); builder.Indent(); builder.WriteLine("public class {0} : IConfigSerializer", node.SerializerTypeName); builder.LeftPar(); builder.Indent(); }
public void Export(SerializationGenerator generator, string nameSpace, string md5, string targetFolder) { var builder = new TextBuilder(); builder.WriteLine("using System;"); builder.WriteLine("using System.Collections.Generic;"); builder.WriteLine("using System.IO;"); builder.WriteLine("using Kernel;"); builder.WriteLine("using Kernel.Config;"); builder.EmptyLine(); builder.WriteLine("namespace {0}", nameSpace); builder.LeftPar(); builder.Indent(); builder.WriteLine("public partial class ConfigSerializer : ConfigSerializerBase"); builder.LeftPar(); builder.Indent(); builder.WriteLine("private static readonly ConfigFieldInfo[] fields ="); builder.WriteLine("{"); builder.Indent(); foreach (var pair in generator.RegisteredTypes) { if (pair.IsEntry && !pair.Root.PoliClass) { VisitEntry(pair, builder); } } builder.UnIndent(); builder.WriteLine("};"); builder.EmptyLine(); builder.WriteLine("public override ConfigFieldInfo[] Fields { get { return fields; } }"); builder.EmptyLine(); builder.WriteLine("public override string Hash {{ get {{ return \"{0}\"; }} }}", md5); builder.EmptyLine(); builder.WriteLine("private static readonly Dictionary<Type, IConfigSerializer> serializers = new Dictionary<Type, IConfigSerializer>"); builder.WriteLine("{"); builder.Indent(); foreach (var pair in generator.RegisteredTypes) { if ((pair.Root.PoliClass || !XmlUtil.IsPolymorphicClass(pair.Type)) && !pair.IsEnum) { VisitSerializer(pair, builder); } } builder.UnIndent(); builder.WriteLine("};"); builder.EmptyLine(); builder.WriteLine("public override Dictionary<Type, IConfigSerializer> Serializers { get { return serializers; } }"); builder.UnIndent(); builder.RightPar(); builder.UnIndent(); builder.RightPar(); builder.WriteToFile(Path.Combine(targetFolder, "ConfigSerializer.cs")); }