Ejemplo n.º 1
0
        public override System.CodeDom.CodeMemberMethod GetDeserializerMethod()
        {
            CodeMemberMethod method = base.GetDeserializerMethod();

            CodeExpression returnExpression;

            returnExpression = CodeGen.CallMethod(CodeGen.GetReader(), "ReadToEndTrail", GetEncoding(), CodeGen.GetLength(TrailingLength));

            method.Statements.Add(CodeGen.GetReturn(returnExpression));

            return(method);
        }
Ejemplo n.º 2
0
 public virtual CodeExpression GetReaderExpression(CodeExpression reader)
 {
     return(CodeGen.CreateObject(new CodeTypeReference(BaseType.Name), reader, CodeGen.CallMethod(CodeGen.GetThis(), "CS"), CodeGen.GetLogger()));
 }
Ejemplo n.º 3
0
 public CodeExpression GetWriterExpression(CodeExpression writer, CodeExpression obj)
 {
     return(CodeGen.CallMethod(obj, "ToStream",
                               writer, CodeGen.CallMethod(CodeGen.GetThis(), "CS"), CodeGen.GetLogger()));
 }
 public CodeExpression GetWriterExpression(CodeExpression writer, CodeExpression obj)
 {
     return(CodeGen.CallMethod(CodeGen.GetThis(), "WPA", obj, writer, _intEntry.GetEndian()));
 }
 public CodeExpression GetReaderExpression(CodeExpression reader)
 {
     return(CodeGen.CallMethod(CodeGen.GetThis(), "RTEPA", _intEntry.GetTypeReference(), reader, _intEntry.GetEndian(), CodeGen.GetLength(TrailingLength)));
 }
Ejemplo n.º 6
0
 internal static CodeExpression GetCheck(EvalExpression expr, CodeExpression value, CodeExpression i)
 {
     return(CodeGen.CallMethod(CodeGen.GetThis(), "Check", CodeGen.GetPrimitive(expr.Expression), value, i));
 }
        public override CodeMemberMethod GetPreSerializeMethod()
        {
            CodeMemberMethod method = base.GetPreSerializeMethod();

            if (_reference.IsValid())
            {
                CodeExpression right;

                if (_isByteLength)
                {
                    right = CodeGen.CallMethod(CodeGen.GetThis(), "SBL", CodeGen.GetThisField(Name), CodeGen.GetEnum(StringEncoding));
                }
                else
                {
                    right = CodeGen.GetProperty(CodeGen.GetThisField(Name), "Length");
                }

                EvalExpression lengthWrite = LengthWriteExpression;

                if (lengthWrite.IsValid)
                {
                    right = lengthWrite.GetEvalExpression(right);
                }
                else if (_adjustment != 0)
                {
                    right = CodeGen.GetOperator(right, CodeBinaryOperatorType.Subtract, CodeGen.GetPrimitive(_adjustment));
                }

                if (_reference.GetTargetMember().BaseType is StringParserType)
                {
                    right = CodeGen.CallMethod(right, "ToString");
                }
                else
                {
                    right = CodeGen.GetCast(_reference.GetTargetMember().GetTypeReference(), right);
                }

                method.Statements.Add(CodeGen.GetAssign(CodeGen.GetField(CodeGen.GetThis(), _reference.GetNames()), right));
            }

            return(method);
        }
Ejemplo n.º 8
0
 internal static CodeExpression GetCalc(EvalExpression expr, CodeTypeReference fieldType, CodeExpression value)
 {
     return(CodeGen.CallMethod(CodeGen.GetThis(), "Calc", fieldType, CodeGen.GetPrimitive(expr.Expression), value));
 }
Ejemplo n.º 9
0
 internal static CodeExpression GetResolve(EvalExpression expr, CodeExpression value, CodeExpression writer)
 {
     return(CodeGen.CallMethod(CodeGen.GetThis(), "Resolve", CodeGen.GetPrimitive(expr.Expression), writer, value));
 }
Ejemplo n.º 10
0
 internal static CodeArrayCreateExpression CreateArray(CodeTypeReference t, int length)
 {
     return(CreateArray(t, CodeGen.GetPrimitive(length)));
 }
Ejemplo n.º 11
0
 internal static CodeExpression GetLength(int length, EvalExpression lengthExpression)
 {
     if (lengthExpression.IsValid)
     {
         return(CodeGen.CallMethod(CodeGen.GetThis(), "CL", CodeGen.GetPrimitive(length), CodeGen.GetPrimitive(lengthExpression.Expression)));
     }
     else
     {
         return(CodeGen.GetPrimitive(length));
     }
 }
Ejemplo n.º 12
0
        public override System.CodeDom.CodeMemberMethod GetDeserializerMethod()
        {
            CodeMemberMethod method = base.GetDeserializerMethod();

            CodeTypeReference listType = CodeGen.CreateGenericType(typeof(List <>), BaseEntry.GetTypeReference());

            method.Statements.Add(CodeGen.MakeVariable(listType, "ret", CodeGen.CreateObject(listType)));

            if (TrailingLength.IsValid)
            {
                int length;

                // If not a primitive expression or the length is not 0
                if (!TrailingLength.ParseInt(out length) || (length != 0))
                {
                    method.Statements.Add(CodeGen.GetAssign(CodeGen.GetReader(), CodeGen.CreateObject(typeof(DataReader), CodeGen.CallMethod(CodeGen.GetReader(),
                                                                                                                                             "ReadToEndTrail", CodeGen.GetLength(TrailingLength)))));
                }
            }

            List <CodeStatement> loopStatements = new List <CodeStatement>();

            loopStatements.Add(CodeGen.GetStatement(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "Add",
                                                                       _memberEntry.GetReaderExpression(CodeGen.GetReader()))));

            method.Statements.Add(
                CodeGen.GetTryCatch(new CodeStatement[] { CodeGen.GetInfLoop(loopStatements.ToArray()) }, typeof(EndOfStreamException)));

            method.Statements.Add(CodeGen.GetReturn(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "ToArray")));

            return(method);
        }
Ejemplo n.º 13
0
        public override System.CodeDom.CodeMemberMethod GetSerializerMethod()
        {
            CodeMemberMethod method = base.GetSerializerMethod();

            IMemberReaderWriter entry = BaseEntry as IMemberReaderWriter;

            List <CodeStatement> loopStatements = new List <CodeStatement>();

            loopStatements.Add(CodeGen.GetStatement(
                                   entry.GetWriterExpression(CodeGen.GetWriter(), new CodeIndexerExpression(CodeGen.GetObject(), CodeGen.GetVariable("i")))));

            method.Statements.Add(CodeGen.GetForLoop("i", 0,
                                                     CodeGen.GetProperty(CodeGen.GetObject(), "Length"), 1, loopStatements.ToArray()));

            return(method);
        }
Ejemplo n.º 14
0
        public override System.CodeDom.CodeMemberMethod GetPreSerializeMethod()
        {
            CodeMemberMethod method = base.GetPreSerializeMethod();

            if (_reference.IsValid())
            {
                CodeExpression right;

                if (_isByteLength)
                {
                    // Should really save this out and reuse when it comes to actually writing the data, seems a waste
                    method.Statements.Add(CodeGen.MakeVariable(typeof(DataWriter), "writer", CodeGen.CreateObject(typeof(DataWriter))));

                    IMemberReaderWriter entry = BaseEntry as IMemberReaderWriter;

                    List <CodeStatement> loopStatements = new List <CodeStatement>();

                    loopStatements.Add(CodeGen.GetStatement(entry.GetWriterExpression(CodeGen.GetWriter(), CodeGen.GetIndex(CodeGen.GetThisField(Name),
                                                                                                                            CodeGen.GetVariable("i")))));

                    method.Statements.Add(CodeGen.GetForLoop("i", 0, CodeGen.GetProperty(CodeGen.GetThisField(Name), "Length"),
                                                             1, loopStatements.ToArray()));

                    right = CodeGen.GetProperty(CodeGen.GetVariable("writer"), "BytesWritten");
                }
                else
                {
                    right = CodeGen.GetProperty(CodeGen.GetThisField(Name), "Length");
                }

                if (_adjustment != 0)
                {
                    right = CodeGen.GetOperator(right, CodeBinaryOperatorType.Subtract, CodeGen.GetPrimitive(_adjustment));
                }

                method.Statements.Add(CodeGen.GetAssign(CodeGen.GetField(CodeGen.GetThis(),
                                                                         _reference.GetNames()), CodeGen.GetCast(_reference.GetTargetMember().GetTypeReference(), right)));
            }

            return(method);
        }
Ejemplo n.º 15
0
        public override System.CodeDom.CodeMemberMethod GetSerializerMethod()
        {
            CodeMemberMethod method = base.GetSerializerMethod();

            // No point doing anything if there is no length to write
            if (_reference.IsValid())
            {
                IMemberReaderWriter entry = BaseEntry as IMemberReaderWriter;

                List <CodeStatement> loopStatements = new List <CodeStatement>();

                loopStatements.Add(CodeGen.GetStatement(entry.GetWriterExpression(CodeGen.GetWriter(), CodeGen.GetIndex(CodeGen.GetObject(),
                                                                                                                        CodeGen.GetVariable("i")))));

                method.Statements.Add(CodeGen.GetForLoop("i", 0, CodeGen.GetProperty(CodeGen.GetObject(), "Length"),
                                                         1, loopStatements.ToArray()));
            }

            return(method);
        }
Ejemplo n.º 16
0
        public override System.CodeDom.CodeMemberMethod GetDeserializerMethod()
        {
            CodeMemberMethod    method = base.GetDeserializerMethod();
            IMemberReaderWriter entry  = BaseEntry as IMemberReaderWriter;

            if (_reference.IsValid())
            {
                CodeTypeReference    listType       = CodeGen.CreateGenericType(typeof(List <>), BaseEntry.GetTypeReference());
                List <CodeStatement> loopStatements = new List <CodeStatement>();

                method.Statements.Add(CodeGen.MakeVariable(listType, "ret", CodeGen.CreateObject(listType)));

                method.Statements.Add(CodeGen.MakeVariable(typeof(int), "length", GetLength()));

                loopStatements.Add(CodeGen.GetStatement(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "Add", entry.GetReaderExpression(CodeGen.GetReader()))));

                if (_isByteLength)
                {
                    // Reassign reader to just the sub data
                    method.Statements.Add(CodeGen.MakeVariable(typeof(DataReader), "reader", CodeGen.CreateObject(typeof(DataReader),
                                                                                                                  CodeGen.CallMethod(CodeGen.GetArgument("reader"), "ReadBytes", GetLength()))));

                    method.Statements.Add(CodeGen.GetTryCatch(new CodeStatement[] { CodeGen.GetInfLoop(loopStatements.ToArray()) }, typeof(EndOfStreamException)));

                    method.Statements.Add(CodeGen.CallMethod(CodeGen.GetArgument("reader"), "Flush"));
                }
                else
                {
                    method.Statements.Add(CodeGen.GetForLoop("i", 0, CodeGen.GetVariable("length"), 1, loopStatements.ToArray()));
                }

                method.Statements.Add(CodeGen.GetReturn(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "ToArray")));
            }
            else
            {
                method.Statements.Add(CodeGen.GetReturn(CodeGen.CreateArray(GetTypeReference(), 0)));
            }

            return(method);
        }