public IEnumerable <TSelect> FindMatches <TSelect>(string query, int maxCount, Func <string, string, TSelect, int> evalQuality) where TSelect : T { if (evalQuality == null) { evalQuality = DefaultQualityEvaluator; } using (var iter = PartialMatchEnumerator.GetInstance <TSelect>(RootNode, query, maxCount, evalQuality)) { while (iter.MoveNext()) { yield return((TSelect)iter.Current); } } }
public static PartialMatchEnumerator GetInstance <TSelect>(CharNode current, string query, int maxCount, Func <string, string, TSelect, int> evalQuality) where TSelect : T { PartialMatchEnumerator pme; _pool.TryTake(out pme); if (pme != null) { pme.lsTerms.Clear(); pme.matchLookup.Clear(); pme.unique.Clear(); pme.stack.Clear(); } else { pme = new PartialMatchEnumerator(); } pme.Init(current, query, maxCount, evalQuality); return(pme); }