예제 #1
0
        internal override SearchQuery Optimize(ISearchQueryOptimizer optimizer)
        {
            SearchQuery binary = null;
            SearchQuery right  = null;
            SearchQuery left   = null;

            if (optimizer.CanReduce(Left))
            {
                left = optimizer.Reduce(Left);
            }

            if (optimizer.CanReduce(Right))
            {
                right = optimizer.Reduce(Right);
            }

            if (left != null || right != null)
            {
                binary = new BinarySearchQuery(Term, left ?? Left, right ?? Right);
            }
            else
            {
                binary = this;
            }

            if (optimizer.CanReduce(binary))
            {
                return(optimizer.Reduce(binary));
            }

            return(binary);
        }
예제 #2
0
        internal virtual SearchQuery Optimize(ISearchQueryOptimizer optimizer)
        {
            if (optimizer.CanReduce(this))
            {
                return(optimizer.Reduce(this));
            }

            return(this);
        }
예제 #3
0
		internal override SearchQuery Optimize (ISearchQueryOptimizer optimizer)
		{
			var operand = Operand.Optimize (optimizer);
			SearchQuery unary;

			if (operand != Operand)
				unary = new UnarySearchQuery (Term, operand);
			else
				unary = this;

			return optimizer.Reduce (unary);
		}
예제 #4
0
		internal override SearchQuery Optimize (ISearchQueryOptimizer optimizer)
		{
			var operand = Operand.Optimize (optimizer);
			SearchQuery unary;

			if (operand != Operand)
				unary = new UnarySearchQuery (Term, operand);
			else
				unary = this;

			return optimizer.Reduce (unary);
		}
예제 #5
0
		internal override SearchQuery Optimize (ISearchQueryOptimizer optimizer)
		{
			var right = Right.Optimize (optimizer);
			var left = Left.Optimize (optimizer);
			SearchQuery binary;

			if (left != Left || right != Right)
				binary = new BinarySearchQuery (Term, left, right);
			else
				binary = this;

			return optimizer.Reduce (binary);
		}
예제 #6
0
		internal override SearchQuery Optimize (ISearchQueryOptimizer optimizer)
		{
			SearchQuery unary = null;

			if (optimizer.CanReduce (Operand))
				unary = new UnarySearchQuery (Term, optimizer.Reduce (Operand));
			else
				unary = this;

			if (optimizer.CanReduce (unary))
				return optimizer.Reduce (unary);

			return unary;
		}
예제 #7
0
        internal override SearchQuery Optimize(ISearchQueryOptimizer optimizer)
        {
            var         right = Right.Optimize(optimizer);
            var         left  = Left.Optimize(optimizer);
            SearchQuery binary;

            if (left != Left || right != Right)
            {
                binary = new BinarySearchQuery(Term, left, right);
            }
            else
            {
                binary = this;
            }

            return(optimizer.Reduce(binary));
        }
예제 #8
0
        internal override SearchQuery Optimize(ISearchQueryOptimizer optimizer)
        {
            SearchQuery unary = null;

            if (optimizer.CanReduce(Operand))
            {
                unary = new UnarySearchQuery(Term, optimizer.Reduce(Operand));
            }
            else
            {
                unary = this;
            }

            if (optimizer.CanReduce(unary))
            {
                return(optimizer.Reduce(unary));
            }

            return(unary);
        }
예제 #9
0
        internal override SearchQuery Optimize(ISearchQueryOptimizer optimizer)
        {
            SearchQuery binary = null;
            SearchQuery right = null;
            SearchQuery left = null;

            if (optimizer.CanReduce (Left))
                left = optimizer.Reduce (Left);

            if (optimizer.CanReduce (Right))
                right = optimizer.Reduce (Right);

            if (left != null || right != null)
                binary = new BinarySearchQuery (Term, left ?? Left, right ?? Right);
            else
                binary = this;

            if (optimizer.CanReduce (binary))
                return optimizer.Reduce (binary);

            return binary;
        }
예제 #10
0
		internal virtual SearchQuery Optimize (ISearchQueryOptimizer optimizer)
		{
			return optimizer.CanReduce (this) ? optimizer.Reduce (this) : this;
		}
예제 #11
0
        internal virtual SearchQuery Optimize(ISearchQueryOptimizer optimizer)
        {
            if (optimizer.CanReduce (this))
                return optimizer.Reduce (this);

            return this;
        }