Example #1
0
        /// <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(')');
            }
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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);
            }
        }