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())); } }
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())); }
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); }
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); }