public Boolean IsValid() { if (!ScanConstraint.IsValuedConstraint(this.Constraint)) { return(true); } return(this.ConstraintValue != null); }
/// <summary> /// Determines if there is any constraint being managed which uses a relative value constraint, requiring previous values. /// </summary> /// <returns>True if any constraint has a relative value constraint.</returns> public Boolean HasRelativeConstraint() { foreach (ScanConstraint valueConstraint in this) { if (ScanConstraint.IsRelativeConstraint(valueConstraint.Constraint)) { return(true); } } return(false); }
/// <summary> /// Adds a new constraint to the constraint manager. /// </summary> /// <param name="newScanConstraint">The new constraint.</param> /// <param name="hasPriority">Whether or not the new constraint has priority for conflicts.</param> public void AddConstraint(ScanConstraint newScanConstraint, Boolean hasPriority = true) { // Remove conflicting constraints foreach (ScanConstraint scanConstraint in this.ValueConstraints.Select(x => x).Reverse()) { if (scanConstraint.ConflictsWith(newScanConstraint)) { this.ValueConstraints.Remove(scanConstraint); } } this.ValueConstraints.Add(newScanConstraint); }
/// <summary> /// Determines if this constraint conflicts with another constraint. /// </summary> /// <param name="other">The other scan constraint.</param> /// <returns>True if the constraints conflict, otherwise false.</returns> public Boolean ConflictsWith(ScanConstraint other) { if (this.Constraint == other.Constraint) { return(true); } if (ScanConstraint.IsRelativeConstraint(this.Constraint) && ScanConstraint.IsRelativeConstraint(other.Constraint)) { return(true); } if (ScanConstraint.IsValuedConstraint(this.Constraint) && ScanConstraint.IsValuedConstraint(other.Constraint)) { if (!ScanConstraint.IsRelativeConstraint(this.Constraint) && !ScanConstraint.IsRelativeConstraint(other.Constraint)) { if ((this.Constraint == ConstraintType.LessThan || this.Constraint == ConstraintType.LessThanOrEqual || this.Constraint == ConstraintType.NotEqual) && (other.Constraint == ConstraintType.GreaterThan || other.Constraint == ConstraintType.GreaterThanOrEqual || other.Constraint == ConstraintType.NotEqual)) { if ((dynamic)this.ConstraintValue <= (dynamic)other.ConstraintValue) { return(true); } return(false); } if ((this.Constraint == ConstraintType.GreaterThan || this.Constraint == ConstraintType.GreaterThanOrEqual || this.Constraint == ConstraintType.NotEqual) && (other.Constraint == ConstraintType.LessThan || other.Constraint == ConstraintType.LessThanOrEqual || other.Constraint == ConstraintType.NotEqual)) { if ((dynamic)this.ConstraintValue >= (dynamic)other.ConstraintValue) { return(true); } return(false); } return(true); } } return(false); }
/// <summary> /// Determines if this constraint conflicts with another constraint. /// </summary> /// <param name="scanConstraint">The other scan constraint.</param> /// <returns>True if the constraints conflict, otherwise false.</returns> public Boolean ConflictsWith(ScanConstraint scanConstraint) { if (this.Constraint == scanConstraint.Constraint) { return(true); } if (this.IsRelativeConstraint() && scanConstraint.IsRelativeConstraint()) { return(true); } if (this.IsValuedConstraint() && scanConstraint.IsValuedConstraint()) { if (!this.IsRelativeConstraint() && !scanConstraint.IsRelativeConstraint()) { if ((this.Constraint == ConstraintsEnum.LessThan || this.Constraint == ConstraintsEnum.LessThanOrEqual || this.Constraint == ConstraintsEnum.NotEqual) && (scanConstraint.Constraint == ConstraintsEnum.GreaterThan || scanConstraint.Constraint == ConstraintsEnum.GreaterThanOrEqual || scanConstraint.Constraint == ConstraintsEnum.NotEqual)) { if ((dynamic)this.ConstraintValue <= (dynamic)scanConstraint.ConstraintValue) { return(true); } return(false); } if ((this.Constraint == ConstraintsEnum.GreaterThan || this.Constraint == ConstraintsEnum.GreaterThanOrEqual || this.Constraint == ConstraintsEnum.NotEqual) && (scanConstraint.Constraint == ConstraintsEnum.LessThan || scanConstraint.Constraint == ConstraintsEnum.LessThanOrEqual || scanConstraint.Constraint == ConstraintsEnum.NotEqual)) { if ((dynamic)this.ConstraintValue >= (dynamic)scanConstraint.ConstraintValue) { return(true); } return(false); } return(true); } } return(false); }
/// <summary> /// Adds a new constraint to the constraint manager. /// </summary> /// <param name="newScanConstraint">The new constraint.</param> /// <param name="hasPriority">Whether or not the new constraint has priority for conflicts.</param> public void AddConstraint(ScanConstraint newScanConstraint, Boolean hasPriority = true) { // Resolve potential conflicts depending on if the new constraint has priority if (newScanConstraint.Constraint == ConstraintsEnum.NotScientificNotation) { if (this.ElementType != typeof(Single) && this.ElementType != typeof(Double)) { return; } } // Remove conflicting constraints foreach (ScanConstraint scanConstraint in this.ValueConstraints.Select(x => x).Reverse()) { if (scanConstraint.ConflictsWith(newScanConstraint)) { this.ValueConstraints.Remove(scanConstraint); } } this.ValueConstraints.Add(newScanConstraint); }
/// <summary> /// Removes the specified constraint. /// </summary> /// <param name="scanConstraint">The constraint to remove.</param> public void RemoveConstraints(ScanConstraint scanConstraint) { this.ValueConstraints.Remove(scanConstraint); }