Пример #1
0
        public CodeExpression GetReaderExpression(CodeExpression reader)
        {
            CodeExpression ret;

            ret = CodeGen.CallMethod(typeof(ParserUtils), _isByteLength ? "ReadFixedByteLengthString" : "ReadFixedLengthString",
                                     reader,
                                     GetEncoding(),
                                     CodeGen.GetLength(Length));

            return(ret);
        }
 public CodeExpression GetReaderExpression(CodeExpression reader)
 {
     if (_isByteLength)
     {
         return(CodeGen.CallMethod(CodeGen.GetThis(), "FixBPA", BaseEntry.GetTypeReference(),
                                   reader, CodeGen.GetLength(Length), _intEntry.GetEndian()));
     }
     else
     {
         return(CodeGen.CallMethod(CodeGen.GetThis(), "FixPA", BaseEntry.GetTypeReference(),
                                   reader, CodeGen.GetLength(Length), _intEntry.GetEndian()));
     }
 }
Пример #3
0
        public CodeExpression GetWriterExpression(CodeExpression writer, CodeExpression obj)
        {
            CodeExpression ret;

            if (_isByteLength)
            {
                ret = CodeGen.CallMethod(typeof(ParserUtils), "WriteFixedByteLengthString",
                                         writer,
                                         GetEncoding(), obj, CodeGen.GetLength(Length),
                                         CodeGen.GetPrimitive((byte)Padding));
            }
            else
            {
                ret = CodeGen.CallMethod(typeof(ParserUtils), "WriteFixedLengthString",
                                         writer,
                                         GetEncoding(), obj, CodeGen.GetLength(Length),
                                         CodeGen.GetPrimitive((char)Padding));
            }

            return(ret);
        }
 public CodeExpression GetWriterExpression(CodeExpression writer, CodeExpression obj)
 {
     return(CodeGen.CallMethod(CodeGen.GetThis(), "FixWPA", obj, writer, CodeGen.GetLength(Length), _intEntry.GetEndian()));
 }
Пример #5
0
        public override System.CodeDom.CodeMemberMethod GetDeserializerMethod()
        {
            CodeMemberMethod    method = base.GetDeserializerMethod();
            IMemberReaderWriter entry  = BaseEntry as IMemberReaderWriter;

            if (_isByteLength)
            {
                CodeTypeReference listType = CodeGen.CreateGenericType(typeof(List <>), BaseEntry.GetTypeReference());
                method.Statements.Add(CodeGen.MakeVariable(listType, "ret",
                                                           CodeGen.CreateObject(listType)));

                method.Statements.Add(CodeGen.GetAssign(CodeGen.GetReader(),
                                                        CodeGen.CallMethod(CodeGen.GetThis(), "GBR", CodeGen.GetReader(), CodeGen.GetPrimitive(_lengthExpression))));

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

                CodeExpression expr = CodeGen.CallMethod(CodeGen.GetVariable("ret"), "Add", entry.GetReaderExpression(CodeGen.GetReader()));

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

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

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

                loopStatements.Add(CodeGen.GetAssign(
                                       CodeGen.GetIndex(
                                           CodeGen.GetVariable("ret"), CodeGen.GetVariable("i")
                                           ),
                                       entry.GetReaderExpression(CodeGen.GetReader()))
                                   );

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

                method.Statements.Add(CodeGen.GetReturn(CodeGen.GetVariable("ret")));
            }

            return(method);
        }
Пример #6
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);
        }
 public CodeExpression GetReaderExpression(CodeExpression reader)
 {
     return(CodeGen.CallMethod(CodeGen.GetThis(), "RTEPA", _intEntry.GetTypeReference(), reader, _intEntry.GetEndian(), CodeGen.GetLength(TrailingLength)));
 }
        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);
        }