private static int DefaultComplexity(ComplexityContext context)
        {
            if (context.Cost.Multipliers.Count == 0)
            {
                return(context.Cost.Complexity);
            }

            int complexity = 0;

            for (int i = 0; i < context.Cost.Multipliers.Count; i++)
            {
                if (MultiplierHelper.TryGetMultiplierValue(
                        context.FieldSelection, context.Variables,
                        context.Cost.Multipliers[i], out int multiplier))
                {
                    complexity += context.Cost.Complexity * multiplier;
                }
                else
                {
                    complexity += context.Cost.Complexity;
                }
            }

            return(complexity);
        }
Esempio n. 2
0
    /// <summary>
    /// The default complexity calculation algorithm.
    /// </summary>
    /// <param name="context">
    /// The complexity context.
    /// </param>
    /// <returns>
    /// Returns the calculated field complexity.
    /// </returns>
    public static int DefaultCalculation(ComplexityContext context)
    {
        if (context.Multipliers.Count == 0)
        {
            return(context.Complexity + context.ChildComplexity);
        }

        var cost = context.Complexity + context.ChildComplexity;
        var needsDefaultMultiplier = true;

        foreach (MultiplierPathString multiplier in context.Multipliers)
        {
            if (context.TryGetArgumentValue(multiplier, out int value))
            {
                cost *= value;
                needsDefaultMultiplier = false;
            }
        }

        if (needsDefaultMultiplier && context.DefaultMultiplier.HasValue)
        {
            cost *= context.DefaultMultiplier.Value;
        }

        return(cost);
    }
Esempio n. 3
0
 public static int DefaultCalculation(ComplexityContext context)
 {
     return(context.Cost.Complexity);
 }