private static ExtendedConstraint ExtendConstraint(IConstraint constraint, ReadOnlyCollection <DimensionWithValues> dimensionValues) { List <int> dimensionIndexes = GetDimensionIndexes(constraint, dimensionValues).ToList(); if (dimensionIndexes.Count == 0) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Constraint {0} doesn't have any required dimensions.", constraint.GetType().Name)); } ReadOnlyCollection <DimensionWithValues> dimensionValuesSubset = dimensionIndexes.Select(di => dimensionValues[di]).ToList().AsReadOnly(); ExtendedConstraint ret = new ExtendedConstraint(dimensionIndexes, dimensionValues); foreach (ReadOnlyCollection <int> indexes in CombinatorialUtilities.GetAllIndexCombinations(dimensionValuesSubset.Select(dv => dv.Values.Count))) { Vector v = CombinatorialUtilities.ConstructVector(dimensionValuesSubset, indexes); if (constraint.IsValid(v)) { ret.AddNewValueCombinations(indexes); } } return(ret); }
private static ExtendedConstraint ExtendConstraint(IConstraint constraint, ReadOnlyCollection<DimensionWithValues> dimensionValues) { List<int> dimensionIndexes = GetDimensionIndexes(constraint, dimensionValues).ToList(); if (dimensionIndexes.Count == 0) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Constraint {0} doesn't have any required dimensions.", constraint.GetType().Name)); } ReadOnlyCollection<DimensionWithValues> dimensionValuesSubset = dimensionIndexes.Select(di => dimensionValues[di]).ToList().AsReadOnly(); ExtendedConstraint ret = new ExtendedConstraint(dimensionIndexes, dimensionValues); foreach (ReadOnlyCollection<int> indexes in CombinatorialUtilities.GetAllIndexCombinations(dimensionValuesSubset.Select(dv => dv.Values.Count))) { Vector v = CombinatorialUtilities.ConstructVector(dimensionValuesSubset, indexes); if (constraint.IsValid(v)) { ret.AddNewValueCombinations(indexes); } } return ret; }
protected override bool IsValid(IEnumerable <int> combination) { Vector v = CombinatorialUtilities.ConstructVector(_dimensionValuesSubset, combination.ToList().AsReadOnly()); return(_constraint.IsValid(v)); }
public bool IsValid(Vector target) { Vector innerVector = target.GetValue(QualifiedDimension.Create(_path.Last(), _path.Take(_path.Count - 1))); return(_innerConstraint.IsValid(innerVector)); }