Move from for loops to std::any/all_of

This commit is contained in:
ZeldaZach 2024-12-15 22:21:34 -05:00 committed by Zach Halpern
parent 6a54116095
commit 07669b1461

View file

@ -72,20 +72,14 @@ static void setupParserRules()
search["Start"] = passthru; search["Start"] = passthru;
search["QueryPartList"] = [](const peg::SemanticValues &sv) -> Filter { search["QueryPartList"] = [](const peg::SemanticValues &sv) -> Filter {
return [=](const CardData &x) { return [=](const CardData &x) {
for (const auto &i : sv) { auto matchesFilter = [&x](const std::any &query) { return std::any_cast<Filter>(query)(x); };
if (!std::any_cast<Filter>(i)(x)) return std::all_of(sv.begin(), sv.end(), matchesFilter);
return false;
}
return true;
}; };
}; };
search["ComplexQueryPart"] = [](const peg::SemanticValues &sv) -> Filter { search["ComplexQueryPart"] = [](const peg::SemanticValues &sv) -> Filter {
return [=](const CardData &x) { return [=](const CardData &x) {
for (const auto &i : sv) { auto matchesFilter = [&x](const std::any &query) { return std::any_cast<Filter>(query)(x); };
if (std::any_cast<Filter>(i)(x)) return std::any_of(sv.begin(), sv.end(), matchesFilter);
return true;
}
return false;
}; };
}; };
search["SomewhatComplexQueryPart"] = passthru; search["SomewhatComplexQueryPart"] = passthru;
@ -101,21 +95,19 @@ static void setupParserRules()
search["SetQuery"] = [](const peg::SemanticValues &sv) -> Filter { search["SetQuery"] = [](const peg::SemanticValues &sv) -> Filter {
StringMatcher matcher = std::any_cast<StringMatcher>(sv[0]); StringMatcher matcher = std::any_cast<StringMatcher>(sv[0]);
return [=](const CardData &x) -> bool { return [=](const CardData &x) -> bool {
for (const auto &set : x->getSets().keys()) { QList<QString> sets = x->getSets().keys();
if (matcher(set))
return true; auto matchesSet = [&matcher](const QString &set) { return matcher(set); };
} return std::any_of(sets.begin(), sets.end(), matchesSet);
return false;
}; };
}; };
search["RarityQuery"] = [](const peg::SemanticValues &sv) -> Filter { search["RarityQuery"] = [](const peg::SemanticValues &sv) -> Filter {
StringMatcher matcher = std::any_cast<StringMatcher>(sv[0]); StringMatcher matcher = std::any_cast<StringMatcher>(sv[0]);
return [=](const CardData &x) -> bool { return [=](const CardData &x) -> bool {
for (const auto &set : x->getSets().values()) { QList<CardInfoPerSet> infos = x->getSets().values();
if (matcher(set.getProperty("rarity")))
return true; auto matchesRarity = [&matcher](const CardInfoPerSet &info) { return matcher(info.getProperty("rarity")); };
} return std::any_of(infos.begin(), infos.end(), matchesRarity);
return false;
}; };
}; };
search["FormatQuery"] = [](const peg::SemanticValues &sv) -> Filter { search["FormatQuery"] = [](const peg::SemanticValues &sv) -> Filter {
@ -172,12 +164,10 @@ static void setupParserRules()
} else { } else {
auto target = std::any_cast<QStringList>(sv[0]); auto target = std::any_cast<QStringList>(sv[0]);
return [=](const QString &s) { return [=](const QString &s) {
for (const QString &str : target) { auto containsString = [&s](const QString &str) {
if (s.split(" ").contains(str, Qt::CaseInsensitive)) { return s.split(" ").contains(str, Qt::CaseInsensitive);
return true; };
} return std::any_of(target.begin(), target.end(), containsString);
}
return false;
}; };
} }
}; };
@ -193,12 +183,10 @@ static void setupParserRules()
if (sv.choice() != 1) { if (sv.choice() != 1) {
auto target = std::any_cast<QStringList>(sv[0]); auto target = std::any_cast<QStringList>(sv[0]);
return [=](const QString &s) { return [=](const QString &s) {
for (const QString &str : target) { auto containsString = [&s](const QString &str) {
if (s.split(" ").contains(str, Qt::CaseInsensitive)) { return s.split(" ").contains(str, Qt::CaseInsensitive);
return true; };
} return std::any_of(target.begin(), target.end(), containsString);
}
return false;
}; };
} else { } else {
auto target = std::any_cast<QString>(sv[0]); auto target = std::any_cast<QString>(sv[0]);
@ -285,11 +273,8 @@ static void setupParserRules()
if (parts.contains("c") && match.length() == 0) if (parts.contains("c") && match.length() == 0)
return true; return true;
for (const auto &i : match) { auto containsColor = [&parts](const QString &s) { return parts.contains(s); };
if (parts.contains(i)) return std::any_of(match.begin(), match.end(), containsColor);
return true;
}
return false;
}; };
} else { } else {
return [=](const CardData &x) { return [=](const CardData &x) {
@ -305,11 +290,8 @@ static void setupParserRules()
return false; return false;
} }
for (const auto &i : match) { auto containsColor = [&parts](const QString &s) { return parts.contains(s); };
if (!parts.contains(i)) return std::all_of(match.begin(), match.end(), containsColor);
return false;
}
return true;
}; };
} }
}; };