示例#1
0
        public Boolean IsValid()
        {
            if (!ScanConstraint.IsValuedConstraint(this.Constraint))
            {
                return(true);
            }

            return(this.ConstraintValue != null);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        /// <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);
        }
示例#7
0
 /// <summary>
 /// Removes the specified constraint.
 /// </summary>
 /// <param name="scanConstraint">The constraint to remove.</param>
 public void RemoveConstraints(ScanConstraint scanConstraint)
 {
     this.ValueConstraints.Remove(scanConstraint);
 }