/// <summary> /// Appends the textual representation of this expression to <paramref name="builder" />. /// </summary> internal override void AppendString(StringBuilder builder) { if (Operation == ConditionalOperation.Not) { builder.Append('!'); Right.AppendString(builder); return; } if (Left.IsLogicalUnit) { builder.Append('('); } Left.AppendString(builder); if (Left.IsLogicalUnit) { builder.Append(')'); } builder.Append(' '); builder.Append(GetOperatorString(Operation)); builder.Append(' '); if (Right.IsLogicalUnit) { builder.Append('('); } Right.AppendString(builder); if (Right.IsLogicalUnit) { builder.Append(')'); } }
/// <summary> /// Appends the textual representation of this expression to <paramref name="builder" />. /// </summary> internal override void AppendString(StringBuilder builder) { Left.AppendString(builder); builder.Append(' '); builder.Append(GetOperatorString(Operation)); builder.Append(' '); Right.AppendString(builder); }
/// <summary> /// Appends the textual representation of this expression to <paramref name="builder" />. /// </summary> internal override void AppendString(StringBuilder builder) { Left.AppendString(builder); builder.Append(' '); builder.Append(GetOperatorCharacter(Operation)); builder.Append(' '); if (Operation != MathematicOperation.Add && Right.Type == ExpressionType.Mathematic) { builder.Append('('); Right.AppendString(builder); builder.Append(')'); } else { Right.AppendString(builder); } }
internal void AppendCondition(StringBuilder builder, NumberFormat numberFormat, string addSources = null, string subSources = null, string addHits = null, string andNext = null) { if (!string.IsNullOrEmpty(addSources)) { builder.Append('('); builder.Append(addSources); } else if (!string.IsNullOrEmpty(subSources)) { builder.Append('('); } else if (!string.IsNullOrEmpty(addHits)) { builder.Append(addHits); } else if (!string.IsNullOrEmpty(andNext)) { builder.Append(andNext); } switch (Type) { case RequirementType.AddSource: Left.AppendString(builder, numberFormat); builder.Append(" + "); break; case RequirementType.SubSource: builder.Append(" - "); Left.AppendString(builder, numberFormat); break; default: Left.AppendString(builder, numberFormat); break; } if (!string.IsNullOrEmpty(subSources)) { builder.Append(subSources); builder.Append(')'); } else if (!string.IsNullOrEmpty(addSources)) { builder.Append(')'); } switch (Operator) { case RequirementOperator.Equal: builder.Append(" == "); break; case RequirementOperator.NotEqual: builder.Append(" != "); break; case RequirementOperator.LessThan: builder.Append(" < "); break; case RequirementOperator.LessThanOrEqual: builder.Append(" <= "); break; case RequirementOperator.GreaterThan: builder.Append(" > "); break; case RequirementOperator.GreaterThanOrEqual: builder.Append(" >= "); break; case RequirementOperator.None: return; } Right.AppendString(builder, numberFormat); }
internal void AppendCondition(StringBuilder builder, NumberFormat numberFormat, string addSources = null, string subSources = null, string addHits = null, string andNext = null, string addAddress = null) { if (!string.IsNullOrEmpty(addSources)) { builder.Append('('); builder.Append(addSources); } else if (!string.IsNullOrEmpty(subSources)) { builder.Append('('); } else if (!string.IsNullOrEmpty(addHits)) { builder.Append(addHits); } else if (!string.IsNullOrEmpty(andNext)) { builder.Append(andNext); } string suffix = null; switch (Type) { case RequirementType.AddSource: Left.AppendString(builder, numberFormat); suffix = " + "; break; case RequirementType.SubSource: builder.Append(" - "); Left.AppendString(builder, numberFormat); break; default: if (Operator != RequirementOperator.None && string.IsNullOrEmpty(subSources) && string.IsNullOrEmpty(addSources)) { var clone = new Requirement { Left = this.Left, Operator = this.Operator, Right = this.Right }; var result = clone.Evaluate(); if (result == true) { builder.Append("always_true()"); return; } else if (result == false) { builder.Append("always_false()"); return; } } Left.AppendString(builder, numberFormat, addAddress); break; } // scaling operators need to be appended before chained operations switch (Operator) { case RequirementOperator.Multiply: builder.Append(" * "); Right.AppendString(builder, numberFormat, addAddress); break; case RequirementOperator.Divide: builder.Append(" / "); Right.AppendString(builder, numberFormat, addAddress); break; case RequirementOperator.BitwiseAnd: builder.Append(" & "); Right.AppendString(builder, numberFormat, addAddress); break; } // append chained operations if (!string.IsNullOrEmpty(subSources)) { builder.Append(subSources); builder.Append(')'); } else if (!string.IsNullOrEmpty(addSources)) { builder.Append(')'); } // handle comparison operators switch (Operator) { case RequirementOperator.Equal: builder.Append(" == "); break; case RequirementOperator.NotEqual: builder.Append(" != "); break; case RequirementOperator.LessThan: builder.Append(" < "); break; case RequirementOperator.LessThanOrEqual: builder.Append(" <= "); break; case RequirementOperator.GreaterThan: builder.Append(" > "); break; case RequirementOperator.GreaterThanOrEqual: builder.Append(" >= "); break; case RequirementOperator.Multiply: case RequirementOperator.Divide: case RequirementOperator.BitwiseAnd: // handled above, treat like none case RequirementOperator.None: if (suffix != null) { builder.Append(suffix); } return; } Right.AppendString(builder, numberFormat, addAddress); if (suffix != null) { builder.Append(suffix); } }