/* * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef IteratorPair_h__ #define IteratorPair_h__ #include // NOTE: this import is NEEDED (even though some IDEs report it as unused) namespace Acore { /** * @class IteratorPair * * @brief Utility class to enable range for loop syntax for multimap.equal_range uses */ template class IteratorPair { public: constexpr IteratorPair() : _iterators() { } constexpr IteratorPair(iterator first, iterator second) : _iterators(first, second) { } constexpr IteratorPair(std::pair iterators) : _iterators(iterators) { } constexpr iterator begin() const { return _iterators.first; } constexpr iterator end() const { return _iterators.second; } private: std::pair _iterators; }; namespace Containers { template inline auto MapEqualRange(M& map, typename M::key_type const& key) -> IteratorPair { return { map.equal_range(key) }; } } //! namespace Containers } //! namespace Acore #endif // IteratorPair_h__