/// Author: Bert van Montfort
 /// <summary>
 /// Initializes a new instance of the <see cref="Shared.VariableCombo"/> class.
 /// </summary>
 /// <param name="leftSolver">Left solver.</param>
 /// <param name="rightSolver">Right solver.</param>
 /// <param name="mathOperator">Math operator.</param>
 public VariableCombo(VariableSolver leftSolver, VariableSolver rightSolver, EMathOperator mathOperator)
 {
     this.leftSolver = leftSolver;
     this.rightSolver = rightSolver;
     this.mathOperator = mathOperator;
     //XmlReader reader = XmlReader.Create (new StringReader ("<books><book><title>a</title></book></books>"));
 }
Esempio n. 2
0
        public Condition <T> FieldOperation(string field, EMathOperator oper)
        {
            Contract.Requires(!String.IsNullOrWhiteSpace(field));
            Contract.Requires(oper != EMathOperator.None);

            ClauseOperationElement elem = new ClauseOperationElement();

            ClauseVariable var = new ClauseVariable();

            var.Name         = field;
            elem.LeftElement = var;

            elem.Operator = oper;

            return(AddClause(elem));
        }
Esempio n. 3
0
        /// Author: Max Hamulyak
        /// Date:	30-06-2015
        /// <summary>
        /// Builds the solver needed for an define variable statement, using a list of conditions.
        /// based on a set of rules it can be checked how the list should be parsed, recursivly. 
        /// </summary>
        /// <returns>The define variable.</returns>
        /// <param name="conditions">Conditions.</param>
        /// <param name="priorityOperator">Priority operator.</param>
        protected virtual VariableSolver BuildDefineVariable(List<IAssignment> conditions, EMathOperator priorityOperator)
        {
            int index = 0;
            bool stopLoop = false;

            while (index < conditions.Count && !stopLoop) {

                if (conditions.Count > 3) {
                    int loopIndex = 0;
                    while (loopIndex < conditions.Count) {
                        IAssignment assignment = conditions.ElementAt (loopIndex);
                        if (assignment is MathOperator) {

                            if ((assignment as MathOperator).MathOperator2 == priorityOperator) {
                                int itemIndex = conditions.IndexOf (assignment);
                                IAssignment left = conditions.ElementAt (itemIndex - 1);
                                IAssignment right = conditions.ElementAt (itemIndex + 1);
                                conditions.Remove (left);
                                conditions.Remove (right);
                                conditions.Remove (assignment);
                                if ((left is VariableSolver) && (right is VariableSolver)) {
                                    VariableCombo combo = new VariableCombo ((left as VariableSolver), (right as VariableSolver), priorityOperator);
                                    conditions.Insert (itemIndex - 1, combo);
                                } else {
                                    throw InvalidAssignment (left.LineNumber);
                                }
                            }
                        }
                        loopIndex++;
                    }
                    BuildDefineVariable (conditions, priorityOperator + 1);
                } else {
                    stopLoop = true;
                }
            }
            IAssignment returnAssignment = null;
            if (conditions.Count == 1) {
                //Should be concrete
                returnAssignment = conditions.ElementAt(0);

            } else if (conditions.Count == 2) {
                throw InvalidAssignmentTwoAssignmentValues (conditions);
            } else if (conditions.Count == 3) {
                if (conditions.ElementAt (1) is MathOperator) {
                    if (conditions.ElementAt (0) is VariableSolver && conditions.ElementAt (2) is VariableSolver) {

                        returnAssignment = new VariableCombo ((conditions.ElementAt (0) as VariableSolver), (conditions.ElementAt (2) as VariableSolver), (conditions.ElementAt (1) as MathOperator).MathOperator2);
                    } else {
                        throw InvalidAssignment (conditions.ElementAt (1).LineNumber);
                    }
                } else {
                    throw InvalidAssignmentMathOperator(conditions.ElementAt(1).LineNumber);
                }
            } else {
                throw InvalidAssignment (conditions.ElementAt (0).LineNumber);
            }

            return returnAssignment as VariableSolver;
        }
 /// Author: Bert van Montfort
 /// <summary>
 /// Creates a new mathOperator for use by Variable combo
 /// </summary>
 /// <param name="mathOperator">Math operator.</param>
 public MathOperator(EMathOperator mathOperator)
 {
     this.mathOperator = mathOperator;
 }
Esempio n. 5
0
 public ClauseOperationElement()
 {
     Operator = EMathOperator.None;
 }