mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-20 09:22:15 -07:00
Move from for loops to std::any/all_of
This commit is contained in:
parent
6a54116095
commit
07669b1461
1 changed files with 24 additions and 42 deletions
|
|
@ -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;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue