public CodeExpression GetReaderExpression(CodeExpression reader) { CodeExpression returnExpression; // Might as well return an empty string if (!_reference.IsValid()) { returnExpression = CodeGen.GetPrimitive(String.Empty); } else { string name = _isByteLength ? "FixBS" : "FixS"; List <CodeExpression> parameters = new List <CodeExpression>(); parameters.Add(reader); parameters.Add(CodeGen.GetEnum(StringEncoding)); parameters.Add(CodeGen.GetField(CodeGen.GetThis(), _reference.GetNames())); EvalExpression lengthRead = LengthReadExpression; if (lengthRead.IsValid) { parameters.Add(CodeGen.GetPrimitive(lengthRead.Expression)); } else { parameters.Add(CodeGen.GetPrimitive(_adjustment)); } returnExpression = CodeGen.CallMethod(CodeGen.GetThis(), name, parameters.ToArray()); } return(returnExpression); }
public CodeExpression GetReaderExpression(CodeExpression reader) { CodeExpression ret; if (!String.IsNullOrEmpty(_termString)) { ret = CodeGen.CallMethod(CodeGen.GetThis(), "RTS", reader, CodeGen.GetEnum(StringEncoding), CodeGen.GetPrimitive(GeneralUtils.DecodeEscapedString(_termString)), CodeGen.GetPrimitive(!_notrequired)); } else { ret = CodeGen.CallMethod(CodeGen.GetThis(), "RTS", reader, CodeGen.GetEnum(StringEncoding), CodeGen.GetPrimitive(_termChar), CodeGen.GetPrimitive(!_notrequired)); } return(ret); }
public CodeExpression GetWriterExpression(CodeExpression writer, CodeExpression obj) { CodeExpression ret; if (!String.IsNullOrEmpty(_termString)) { ret = CodeGen.CallMethod(CodeGen.GetThis(), "WTS", writer, CodeGen.GetEnum(StringEncoding), obj, CodeGen.GetPrimitive(GeneralUtils.DecodeEscapedString(_termString))); } else { ret = CodeGen.CallMethod(CodeGen.GetThis(), "WTS", writer, CodeGen.GetEnum(StringEncoding), obj, CodeGen.GetPrimitive(_termChar) ); } return(ret); }
public CodeExpression GetWriterExpression(CodeExpression writer, CodeExpression obj) { // No point doing anything if there is no length to write if (_reference.IsValid()) { if (StringEncoding == BinaryStringEncoding.ASCII) { return(CodeGen.CallMethod(writer, "Write", obj)); } else { return(CodeGen.CallMethod(writer, "Write", obj, CodeGen.GetEnum(StringEncoding))); } } else { return(CodeGen.CallMethod(writer, "Write", CodeGen.GetPrimitive(String.Empty))); } }
/// <summary> /// Create expression to get the encoding of the string /// </summary> /// <returns>The expression to get the encoding</returns> protected CodeExpression GetEncoding() { return(CodeGen.CallMethod(typeof(GeneralUtils), "GetEncodingFromType", CodeGen.GetEnum(StringEncoding))); }
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); }