aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-12-24 19:48:39 +0100
committerShauren <shauren.trinity@gmail.com>2015-12-24 19:48:39 +0100
commitae20b2ab561bc07d85f443ae914bc597c9d6ac6e (patch)
tree300cf20f4cce380152831f073f6cb6ab634fa003 /src/server/shared
parent2796de1a77a30ae1e50c6de046e6b1cf0f85f7cc (diff)
Core/Utils: Moved rng functions to separate header and added utility functions to select a random element from a container where each element can have different chance of being selected
Diffstat (limited to 'src/server/shared')
-rw-r--r--src/server/shared/Containers.h113
1 files changed, 0 insertions, 113 deletions
diff --git a/src/server/shared/Containers.h b/src/server/shared/Containers.h
deleted file mode 100644
index 685acea05e3..00000000000
--- a/src/server/shared/Containers.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 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 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 <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TRINITY_CONTAINERS_H
-#define TRINITY_CONTAINERS_H
-
-#include "Define.h"
-#include <list>
-
-//! Because circular includes are bad
-extern uint32 urand(uint32 min, uint32 max);
-
-namespace Trinity
-{
- namespace Containers
- {
- template<class T>
- void RandomResizeList(std::list<T> &list, uint32 size)
- {
- uint32 list_size = uint32(list.size());
-
- while (list_size > size)
- {
- typename std::list<T>::iterator itr = list.begin();
- std::advance(itr, urand(0, list_size - 1));
- list.erase(itr);
- --list_size;
- }
- }
-
- template<class T, class Predicate>
- void RandomResizeList(std::list<T> &list, Predicate& predicate, uint32 size)
- {
- //! First use predicate filter
- std::list<T> listCopy;
- for (typename std::list<T>::iterator itr = list.begin(); itr != list.end(); ++itr)
- if (predicate(*itr))
- listCopy.push_back(*itr);
-
- if (size)
- RandomResizeList(listCopy, size);
-
- list = listCopy;
- }
-
- /* Select a random element from a container. Note: make sure you explicitly empty check the container */
- template <class C> typename C::value_type const& SelectRandomContainerElement(C const& container)
- {
- typename C::const_iterator it = container.begin();
- std::advance(it, urand(0, uint32(container.size()) - 1));
- return *it;
- }
-
- /**
- * @fn bool Trinity::Containers::Intersects(Iterator first1, Iterator last1, Iterator first2, Iterator last2)
- *
- * @brief Checks if two SORTED containers have a common element
- *
- * @param first1 Iterator pointing to start of the first container
- * @param last1 Iterator pointing to end of the first container
- * @param first2 Iterator pointing to start of the second container
- * @param last2 Iterator pointing to end of the second container
- *
- * @return true if containers have a common element, false otherwise.
- */
- template<class Iterator1, class Iterator2>
- bool Intersects(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
- {
- while (first1 != last1 && first2 != last2)
- {
- if (*first1 < *first2)
- ++first1;
- else if (*first2 < *first1)
- ++first2;
- else
- return true;
- }
-
- return false;
- }
-
- template<class K, class V, template<class, class, class...> class M, class... Rest>
- void MultimapErasePair(M<K, V, Rest...>& multimap, K const& key, V const& value)
- {
- auto range = multimap.equal_range(key);
- for (auto itr = range.first; itr != range.second;)
- {
- if (itr->second == value)
- itr = multimap.erase(itr);
- else
- ++itr;
- }
- }
- }
- //! namespace Containers
-}
-//! namespace Trinity
-
-#endif //! #ifdef TRINITY_CONTAINERS_H