diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-02-23 11:33:53 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-02-23 11:33:53 +0100 |
commit | 67418a1aeee9035234d304b5e9653b832488dd66 (patch) | |
tree | d09fea9a2824e77e4f3ffa8b73ddef765328b081 | |
parent | da07737f9f86ebae1de3b8204921373539530ab8 (diff) |
Core/Utils: Added map key/value utility projections for std::ranges algorithms
-rw-r--r-- | src/common/Containers/FlatSet.h | 2 | ||||
-rw-r--r-- | src/common/Containers/Utilities/MapUtils.h | 11 | ||||
-rw-r--r-- | src/common/Utilities/Tuples.h | 3 |
3 files changed, 15 insertions, 1 deletions
diff --git a/src/common/Containers/FlatSet.h b/src/common/Containers/FlatSet.h index 5602ba17254..2a94282794a 100644 --- a/src/common/Containers/FlatSet.h +++ b/src/common/Containers/FlatSet.h @@ -70,7 +70,7 @@ public: return { _storage.emplace(itr, std::move(newElement)), true }; } - std::pair<iterator, bool> insert(Key const& key) { return emplace(key); } + std::pair<iterator, bool> insert(Key const& key) { return this->emplace(key); } std::size_t erase(Key const& key) { diff --git a/src/common/Containers/Utilities/MapUtils.h b/src/common/Containers/Utilities/MapUtils.h index cb76a9d0579..e4cf6309bef 100644 --- a/src/common/Containers/Utilities/MapUtils.h +++ b/src/common/Containers/Utilities/MapUtils.h @@ -65,5 +65,16 @@ void MultimapErasePair(M& multimap, typename M::key_type const& key, typename M: ++itr; } } + +/** + * Map key projection for various std::ranges algorithms + */ +inline constexpr auto MapKey = []<typename Pair>(Pair&& pair) constexpr -> decltype(auto) { return (std::forward<Pair>(pair).first); /*Parentheses required for decltype(auto) to deduce a reference*/ }; + +/** + * Map value projection for various std::ranges algorithms + */ +inline constexpr auto MapValue = []<typename Pair>(Pair&& pair) constexpr -> decltype(auto) { return (std::forward<Pair>(pair).second); /*Parentheses required for decltype(auto) to deduce a reference*/ +}; } #endif // TRINITYCORE_MAP_UTILS_H diff --git a/src/common/Utilities/Tuples.h b/src/common/Utilities/Tuples.h index 8b608fd8901..e1c8142166f 100644 --- a/src/common/Utilities/Tuples.h +++ b/src/common/Utilities/Tuples.h @@ -60,6 +60,9 @@ namespace Trinity { return Impl::new_from_tuple<T>(std::forward<Tuple>(args), std::make_index_sequence<std::tuple_size_v<std::remove_reference_t<Tuple>>>{}); } + + template <std::size_t I> + inline constexpr auto TupleElement = []<typename Tuple>(Tuple&& tuple) constexpr -> decltype(auto) { return std::get<I>(std::forward<Tuple>(tuple)); }; } #endif // Tuples_h__ |