/// <summary>
        /// Builds CNF conditions form from the given conditions.
        /// </summary>
        /// <param name="conditions">Source conditions.</param>
        /// <returns>Expression in CNF.</returns>
        public ConditionsCNF Build(Conditions conditions)
        {
            IExpression expression = conditions.GetWrappedConditions();

            if (expression == null)
            {
                return(null);
            }

            IExpression transformedExpression = ExpressionToCNFTransformer.Transform(expression);

            Debug.Assert(Stack.Count == 0);
            Stack.Clear();

            transformedExpression.Accept(this);

            ConditionsCNF conditionsCNF = new ConditionsCNF(EvaluationManager, conditions.Parameters);

            while (Stack.Count != 0)
            {
                conditionsCNF.Add(Stack.Pop());
            }
            return(conditionsCNF);
        }
 /// <summary>
 /// Creates the expression CNF builder.
 /// </summary>
 /// <param name="evaluationManager">Evaluation manager.</param>
 public ConditionsCNFBuilder(EvaluationManager evaluationManager)
 {
     ExpressionToCNFTransformer = new ExpressionToCNFTransformer(evaluationManager);
     EvaluationManager          = evaluationManager;
 }