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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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)));
     }
 }
Exemplo n.º 5
0
 /// <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);
        }