Esempio n. 1
0
        internal override void Reverse(int deep)
        {
            if (deep < 0)
            {
                return;
            }
            deep--;

            switch (_comparison)
            {
            case RelationalComparison.And:
            case RelationalComparison.Or:
                _leftCondition.Reverse(deep);
                _comparison = _comparison == RelationalComparison.Or ? RelationalComparison.And : RelationalComparison.Or;
                _rightCondition.Reverse(deep);
                break;

            case RelationalComparison.Eq:
                _comparison = RelationalComparison.NotEq;
                break;

            case RelationalComparison.NotEq:
                _comparison = RelationalComparison.Eq;
                break;

            case RelationalComparison.Contains:
                _comparison = RelationalComparison.Exclude;
                break;

            case RelationalComparison.Exclude:
                _comparison = RelationalComparison.Contains;
                break;

            case RelationalComparison.Ge:
                _comparison = RelationalComparison.Lt;
                break;

            case RelationalComparison.Lt:
                _comparison = RelationalComparison.Ge;
                break;

            case RelationalComparison.Gt:
                _comparison = RelationalComparison.Le;
                break;

            case RelationalComparison.Le:
                _comparison = RelationalComparison.Gt;
                break;
            }
        }
Esempio n. 2
0
        public RelationalCondition(Condition left, RelationalComparison comparison, Condition right)
        {
            left  = ConditionLogic.GetCondition(left);
            right = ConditionLogic.GetCondition(right);

            _leftCondition  = left;
            _rightCondition = right;
            _comparison     = comparison;

            Suffix = left.Suffix;
            Prefix = left.Prefix;

            left.Prefix  = "";
            left.Suffix  = "";
            right.Prefix = "";
            right.Suffix = "";

            RelationalCondition rLeft = left as RelationalCondition;

            if (rLeft != null)
            {
                RelationalComparison comp = rLeft._comparison;

                if ((comp == RelationalComparison.And || comp == RelationalComparison.Or) &&
                    (comparison == RelationalComparison.And || comparison == RelationalComparison.Or) &&
                    rLeft._comparison != comparison)
                {
                    _leftCondition = new ParenthesisCondition(rLeft);
                }
            }

            RelationalCondition rRight = right as RelationalCondition;

            if (rRight != null)
            {
                RelationalComparison comp = rRight._comparison;

                if ((comp == RelationalComparison.And || comp == RelationalComparison.Or) &&
                    (comparison == RelationalComparison.And || comparison == RelationalComparison.Or) &&
                    rRight._comparison != comparison)
                {
                    _rightCondition = new ParenthesisCondition(rRight);
                }
            }
        }
Esempio n. 3
0
        public static string RelationToString(RelationalComparison comparison)
        {
            switch (comparison)
            {
            case RelationalComparison.None:
                return("");

            case RelationalComparison.Le:
                return(" <= ");

            case RelationalComparison.Lt:
                return(" < ");

            case RelationalComparison.Eq:
                return(" == ");

            case RelationalComparison.NotEq:
                return(" ~= ");

            case RelationalComparison.Ge:
                return(" >= ");

            case RelationalComparison.Gt:
                return(" > ");

            case RelationalComparison.And:
                return(" and ");

            case RelationalComparison.Or:
                return(" or ");

            case RelationalComparison.Add:
                return(" + ");

            case RelationalComparison.Minus:
                return(" - ");

            case RelationalComparison.Mult:
                return(" * ");

            case RelationalComparison.Div:
                return(" / ");

            case RelationalComparison.Pow:
                return(" ^ ");

            case RelationalComparison.Mod:
                return(" % ");

            case RelationalComparison.BinaryAnd:
                return(" & ");

            case RelationalComparison.BinaryOr:
                return(" | ");

            case RelationalComparison.BinaryRightShift:
                return(" >> ");

            case RelationalComparison.BinaryLeftShift:
                return(" << ");

            default:
                return("");
            }
        }
Esempio n. 4
0
        private void _readComparison(string comparison)
        {
            string condition = comparison.Replace("and", "&&").Replace("or", "||").Trim(' ');

            switch (condition)
            {
            case "<":
                _comparison = RelationalComparison.Lt;
                break;

            case ">":
                _comparison = RelationalComparison.Gt;
                break;

            case "<=":
                _comparison = RelationalComparison.Le;
                break;

            case ">=":
                _comparison = RelationalComparison.Ge;
                break;

            case "==":
                _comparison = RelationalComparison.Eq;
                break;

            case "~=":
                _comparison = RelationalComparison.NotEq;
                break;

            case "!=":
                _comparison = RelationalComparison.NotEq;
                break;

            case "&&":
                _comparison = RelationalComparison.And;
                break;

            case "||":
                _comparison = RelationalComparison.Or;
                break;

            case "+":
                _comparison = RelationalComparison.Add;
                break;

            case "-":
                _comparison = RelationalComparison.Minus;
                break;

            case "*":
                _comparison = RelationalComparison.Mult;
                break;

            case "/":
                _comparison = RelationalComparison.Div;
                break;

            case "^":
                _comparison = RelationalComparison.Pow;
                break;

            case "%":
                _comparison = RelationalComparison.Mod;
                break;

            case "&":
                _comparison = RelationalComparison.BinaryAnd;
                break;

            case "|":
                _comparison = RelationalComparison.BinaryOr;
                break;

            case ">>":
                _comparison = RelationalComparison.BinaryRightShift;
                break;

            case "<<":
                _comparison = RelationalComparison.BinaryLeftShift;
                break;
            }
        }