예제 #1
0
        public static IReadOnlyCollection <IFilteredTemplateInfo> FilterTemplates(IReadOnlyList <ITemplateInfo> templateList, bool exactMatchesOnly, params Func <ITemplateInfo, MatchInfo?>[] filters)
        {
            HashSet <IFilteredTemplateInfo> matchingTemplates = new HashSet <IFilteredTemplateInfo>(FilteredTemplateEqualityComparer.Default);

            foreach (ITemplateInfo template in templateList)
            {
                List <MatchInfo> matchInformation = new List <MatchInfo>();

                foreach (Func <ITemplateInfo, MatchInfo?> filter in filters)
                {
                    MatchInfo?result = filter(template);

                    if (result.HasValue)
                    {
                        matchInformation.Add(result.Value);
                    }
                }

                FilteredTemplateInfo info = new FilteredTemplateInfo(template, matchInformation);
                if (info.IsMatch || (!exactMatchesOnly && info.IsPartialMatch))
                {
                    matchingTemplates.Add(info);
                }
            }

#if !NET45
            return(matchingTemplates);
#else
            return(matchingTemplates.ToList());
#endif
        }
예제 #2
0
        public IReadOnlyCollection <IFilteredTemplateInfo> List(bool exactMatchesOnly, params Func <ITemplateInfo, string, MatchInfo?>[] filters)
        {
            HashSet <IFilteredTemplateInfo> matchingTemplates = new HashSet <IFilteredTemplateInfo>(FilteredTemplateEqualityComparer.Default);
            HashSet <ITemplateInfo>         allTemplates      = new HashSet <ITemplateInfo>(TemplateEqualityComparer.Default);

            using (Timing.Over("load"))
            {
                _environmentSettings.SettingsLoader.GetTemplates(allTemplates);
            }

            foreach (ITemplateInfo template in allTemplates)
            {
                string           alias            = _aliasRegistry.GetAliasForTemplate(template);
                List <MatchInfo> matchInformation = new List <MatchInfo>();

                foreach (Func <ITemplateInfo, string, MatchInfo?> filter in filters)
                {
                    MatchInfo?result = filter(template, alias);

                    if (result.HasValue)
                    {
                        matchInformation.Add(result.Value);
                    }
                }

                FilteredTemplateInfo info = new FilteredTemplateInfo(template, matchInformation);

                if (info.IsMatch || (!exactMatchesOnly && info.IsPartialMatch))
                {
                    matchingTemplates.Add(info);
                }
            }

#if !NET45
            return(matchingTemplates);
#else
            return(matchingTemplates.ToList());
#endif
        }