ClrPlus.Scripting.MsBuild.Packaging.PivotsExpression.Simplify C# (CSharp) Method

Simplify() private method

private Simplify ( Pivots.Pivot>.Dictionary pivotVsPivotValues ) : PivotsExpression
pivotVsPivotValues Pivots.Pivot>.Dictionary
return PivotsExpression
        internal PivotsExpression Simplify(Dictionary<string, Pivots.Pivot> pivotVsPivotValues)
        {
            if (invariant)
                return this;
            if (matching_combinations.Count == 0)
                return False;
            int possible_combinations = 1;
            foreach (string pivot in relevant_pivots) {
                possible_combinations *= pivotVsPivotValues[pivot].Choices.Keys.Count;
            }
            if (matching_combinations.Count == possible_combinations)
                return True;
            foreach (string pivot in relevant_pivots) {
                var values = pivotVsPivotValues[pivot].Choices.Keys;
                if (matching_combinations.Count % values.Count != 0)
                    continue;
                int reduced_combinations = matching_combinations.Count / values.Count;
                ComparableHashSet<ComparableHashSet<string>> new_combinations = new ComparableHashSet<ComparableHashSet<string>>();
                foreach (var combination in matching_combinations) {
                    ComparableHashSet<string> reduced_combination = new ComparableHashSet<string>(combination);
                    reduced_combination.ExceptWith(values);
                    new_combinations.Add(reduced_combination);
                    if (new_combinations.Count > reduced_combinations)
                        break;
                }
                if (new_combinations.Count == reduced_combinations) {
                    PivotsExpression result = new PivotsExpression();
                    result.relevant_pivots = new HashSet<string>(relevant_pivots);
                    result.relevant_pivots.Remove(pivot);
                    result.matching_combinations = new_combinations;
                    return result.Simplify(pivotVsPivotValues);
                }
            }
            return this;
        }

Usage Example

Ejemplo n.º 1
0
 internal PivotsExpression Simplify(Dictionary<string, Pivots.Pivot> pivotVsPivotValues) {
     if (invariant)
         return this;
     if (matching_combinations.Count == 0)
         return False;
     int possible_combinations = 1;
     foreach (string pivot in relevant_pivots) {
         possible_combinations *= pivotVsPivotValues[pivot].Choices.Keys.Count;
     }
     if (matching_combinations.Count == possible_combinations)
         return True;
     foreach (string pivot in relevant_pivots) {
         var values = pivotVsPivotValues[pivot].Choices.Keys;
         if (matching_combinations.Count % values.Count != 0)
             continue;
         int reduced_combinations = matching_combinations.Count / values.Count;
         ComparableHashSet<ComparableHashSet<string>> new_combinations = new ComparableHashSet<ComparableHashSet<string>>();
         foreach (var combination in matching_combinations) {
             ComparableHashSet<string> reduced_combination = new ComparableHashSet<string>(combination);
             reduced_combination.ExceptWith(values);
             new_combinations.Add(reduced_combination);
             if (new_combinations.Count > reduced_combinations)
                 break;
         }
         if (new_combinations.Count == reduced_combinations) {
             PivotsExpression result = new PivotsExpression();
             result.relevant_pivots = new HashSet<string>(relevant_pivots);
             result.relevant_pivots.Remove(pivot);
             result.matching_combinations = new_combinations;
             return result.Simplify(pivotVsPivotValues);
         }
     }
     return this;
 }
All Usage Examples Of ClrPlus.Scripting.MsBuild.Packaging.PivotsExpression::Simplify