Example #1
0
        protected void VisitReadPolyClass(string variable, string reader, PolyClassTypeNode node, TextBuilder builder)
        {
            builder.WriteLine("int type = {0}.ReadInt32();", reader);
            builder.WriteLine("switch(type)");
            builder.LeftPar();
            builder.Indent();

            var children = node.Children.ToArray();

            for (int index = 0; index < children.Length; index++)
            {
                var n = children[index] as SerializeNode;

                builder.WriteLine("case {0}:", index + 1);

                builder.Indent();
                builder.WriteIndents();
                builder.Write("{0} = ", variable);
                VisitDeserialization(variable, reader, n, builder);
                builder.Write(";");
                builder.NextLine();

                builder.WriteLine("break;");
                builder.UnIndent();
            }

            builder.UnIndent();
            builder.RightPar();
        }
Example #2
0
        public void VisitWritePolyClass(string variable, string writer, PolyClassTypeNode node, TextBuilder builder)
        {
            builder.WriteLine("Type type = {0}.GetType();", variable);

            var children = node.Children.ToArray();

            for (int index = 0; index < children.Length; index++)
            {
                var n = children[index] as SerializeNode;

                builder.WriteIndents();
                if (index > 0)
                {
                    builder.Write("else ");
                }
                builder.Write("if(type == typeof({0}))", n.TypeName);
                builder.NextLine();

                builder.LeftPar();
                builder.Indent();

                builder.WriteLine("{0}.Write({1});", writer, index + 1);

                builder.WriteIndents();
                VisitSerialization(variable + " as " + n.TypeName, writer, n, builder);
                builder.Write(";");
                builder.NextLine();

                builder.UnIndent();
                builder.RightPar();
            }
            if (children.Length > 0)
            {
                builder.WriteLine("else");
                builder.LeftPar();
                builder.Indent();
                builder.WriteLine("{0}.Write(0);", writer);
                builder.UnIndent();
                builder.RightPar();
            }
        }