/// 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>")); }
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)); }
/// 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; }
public ClauseOperationElement() { Operator = EMathOperator.None; }