diff --git a/src/common/Utilities/advstd.h b/src/common/Utilities/advstd.h index 5bdfb52b533..68ddf6a0c10 100644 --- a/src/common/Utilities/advstd.h +++ b/src/common/Utilities/advstd.h @@ -52,4 +52,32 @@ template // for std::ranges::equal_to, std::identity +#include // for std::input_iterator, std::sentinel_for, std::projected + +namespace advstd::ranges +{ +struct Contains +{ + template S, class T, class Proj = std::identity> + requires std::indirect_binary_predicate, T const*> + [[nodiscard]] inline constexpr bool operator()(I first, S last, T const& value, Proj proj = {}) const + { + return std::ranges::find(std::move(first), last, value, proj) != last; + } + + template + requires std::indirect_binary_predicate, Proj>, T const*> + [[nodiscard]] inline constexpr bool operator()(R&& r, T const& value, Proj proj = {}) const + { + auto first = std::ranges::begin(r); + auto last = std::ranges::end(r); + return std::ranges::find(std::move(first), last, value, proj) != last; + } +} inline constexpr contains; +} +#endif + #endif diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index dc17eeaa479..b974c7dd8d9 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -709,7 +709,7 @@ void LootTemplate::ProcessPersonalLoot(std::unordered_map #include @@ -129,7 +130,7 @@ void RealmList::UpdateRealms() for (boost::asio::ip::tcp::endpoint const& endpoint : _resolver->ResolveAll(fields[2 + i].GetStringView(), "")) { boost::asio::ip::address address = endpoint.address(); - if (std::ranges::find(addresses, address) != addresses.end()) + if (advstd::ranges::contains(addresses, address)) continue; addresses.push_back(std::move(address));