+
+ if(quality)
+ *quality = parts.size();
+ return !negate;
+}
+
+string Architecture::best_match(const vector<string> &names) const
+{
+ string best;
+ unsigned best_quality = 0;
+ for(const string &n: names)
+ {
+ unsigned quality;
+ if(match_name(n, &quality))
+ if(quality>best_quality)
+ {
+ best = n;
+ best_quality = quality;
+ }
+ }
+
+ return best;
+}
+
+template<typename T>
+void Architecture::add_pattern(const string &pat)
+{
+ filename_patterns[typeid(T).name()].push_back(Pattern(pat));