static int GetMaxRating(NodeRegexFlag currentReFlags) { int maxRating; if ((currentReFlags & NodeRegexFlag.PreceededByNotSpecific) != 0) { maxRating = RateReFlags(NodeRegexFlag.Mandatory | NodeRegexFlag.Duplicated); } else { maxRating = RateReFlags(NodeRegexFlag.Interesting | NodeRegexFlag.Conditional | NodeRegexFlag.Duplicated); } return(maxRating); }
static int RateReFlags(NodeRegexFlag flags) { var indexedFlags = flags & (NodeRegexFlag.InterestMask | NodeRegexFlag.Conditional | NodeRegexFlag.Duplicated); var ratingsLookupTable = new NodeRegexFlag[] { NodeRegexFlag.Mandatory, NodeRegexFlag.Interesting, NodeRegexFlag.Mandatory | NodeRegexFlag.Conditional, NodeRegexFlag.Interesting | NodeRegexFlag.Conditional, NodeRegexFlag.Mandatory | NodeRegexFlag.Duplicated, NodeRegexFlag.Interesting | NodeRegexFlag.Duplicated, NodeRegexFlag.Mandatory | NodeRegexFlag.Conditional | NodeRegexFlag.Duplicated, NodeRegexFlag.Interesting | NodeRegexFlag.Conditional | NodeRegexFlag.Duplicated, }; return(ratingsLookupTable.Select((f, i) => new { f, i }).Where(x => x.f == indexedFlags).Select(x => x.i) .DefaultIfEmpty(ratingsLookupTable.Length).First()); }