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 virtual CodeExpression GetReaderExpression(CodeExpression reader) { return(CodeGen.CreateObject(new CodeTypeReference(BaseType.Name), reader, CodeGen.CallMethod(CodeGen.GetThis(), "CS"), CodeGen.GetLogger())); }
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))); }
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); }
internal static CodeExpression GetCalc(EvalExpression expr, CodeTypeReference fieldType, CodeExpression value) { return(CodeGen.CallMethod(CodeGen.GetThis(), "Calc", fieldType, CodeGen.GetPrimitive(expr.Expression), value)); }
internal static CodeExpression GetResolve(EvalExpression expr, CodeExpression value, CodeExpression writer) { return(CodeGen.CallMethod(CodeGen.GetThis(), "Resolve", CodeGen.GetPrimitive(expr.Expression), writer, value)); }
internal static CodeArrayCreateExpression CreateArray(CodeTypeReference t, int length) { return(CreateArray(t, CodeGen.GetPrimitive(length))); }
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)); } }
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); }
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); }
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); }
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); }
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); }