From 07669b14616f5471b465b6cb9fddb24c2434379c Mon Sep 17 00:00:00 2001 From: ZeldaZach Date: Sun, 15 Dec 2024 22:21:34 -0500 Subject: [PATCH] Move from for loops to std::any/all_of --- cockatrice/src/game/filters/filter_string.cpp | 66 +++++++------------ 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/cockatrice/src/game/filters/filter_string.cpp b/cockatrice/src/game/filters/filter_string.cpp index 2a5e41e92..b6f6975ed 100644 --- a/cockatrice/src/game/filters/filter_string.cpp +++ b/cockatrice/src/game/filters/filter_string.cpp @@ -72,20 +72,14 @@ static void setupParserRules() search["Start"] = passthru; search["QueryPartList"] = [](const peg::SemanticValues &sv) -> Filter { return [=](const CardData &x) { - for (const auto &i : sv) { - if (!std::any_cast(i)(x)) - return false; - } - return true; + auto matchesFilter = [&x](const std::any &query) { return std::any_cast(query)(x); }; + return std::all_of(sv.begin(), sv.end(), matchesFilter); }; }; search["ComplexQueryPart"] = [](const peg::SemanticValues &sv) -> Filter { return [=](const CardData &x) { - for (const auto &i : sv) { - if (std::any_cast(i)(x)) - return true; - } - return false; + auto matchesFilter = [&x](const std::any &query) { return std::any_cast(query)(x); }; + return std::any_of(sv.begin(), sv.end(), matchesFilter); }; }; search["SomewhatComplexQueryPart"] = passthru; @@ -101,21 +95,19 @@ static void setupParserRules() search["SetQuery"] = [](const peg::SemanticValues &sv) -> Filter { StringMatcher matcher = std::any_cast(sv[0]); return [=](const CardData &x) -> bool { - for (const auto &set : x->getSets().keys()) { - if (matcher(set)) - return true; - } - return false; + QList sets = x->getSets().keys(); + + auto matchesSet = [&matcher](const QString &set) { return matcher(set); }; + return std::any_of(sets.begin(), sets.end(), matchesSet); }; }; search["RarityQuery"] = [](const peg::SemanticValues &sv) -> Filter { StringMatcher matcher = std::any_cast(sv[0]); return [=](const CardData &x) -> bool { - for (const auto &set : x->getSets().values()) { - if (matcher(set.getProperty("rarity"))) - return true; - } - return false; + QList infos = x->getSets().values(); + + auto matchesRarity = [&matcher](const CardInfoPerSet &info) { return matcher(info.getProperty("rarity")); }; + return std::any_of(infos.begin(), infos.end(), matchesRarity); }; }; search["FormatQuery"] = [](const peg::SemanticValues &sv) -> Filter { @@ -172,12 +164,10 @@ static void setupParserRules() } else { auto target = std::any_cast(sv[0]); return [=](const QString &s) { - for (const QString &str : target) { - if (s.split(" ").contains(str, Qt::CaseInsensitive)) { - return true; - } - } - return false; + auto containsString = [&s](const QString &str) { + return s.split(" ").contains(str, Qt::CaseInsensitive); + }; + return std::any_of(target.begin(), target.end(), containsString); }; } }; @@ -193,12 +183,10 @@ static void setupParserRules() if (sv.choice() != 1) { auto target = std::any_cast(sv[0]); return [=](const QString &s) { - for (const QString &str : target) { - if (s.split(" ").contains(str, Qt::CaseInsensitive)) { - return true; - } - } - return false; + auto containsString = [&s](const QString &str) { + return s.split(" ").contains(str, Qt::CaseInsensitive); + }; + return std::any_of(target.begin(), target.end(), containsString); }; } else { auto target = std::any_cast(sv[0]); @@ -285,11 +273,8 @@ static void setupParserRules() if (parts.contains("c") && match.length() == 0) return true; - for (const auto &i : match) { - if (parts.contains(i)) - return true; - } - return false; + auto containsColor = [&parts](const QString &s) { return parts.contains(s); }; + return std::any_of(match.begin(), match.end(), containsColor); }; } else { return [=](const CardData &x) { @@ -305,11 +290,8 @@ static void setupParserRules() return false; } - for (const auto &i : match) { - if (!parts.contains(i)) - return false; - } - return true; + auto containsColor = [&parts](const QString &s) { return parts.contains(s); }; + return std::all_of(match.begin(), match.end(), containsColor); }; } };