From 611ddfee3c36e6b9dc700337c3547137ff7c6752 Mon Sep 17 00:00:00 2001 From: Treeston Date: Fri, 19 Jul 2019 20:37:22 +0200 Subject: [PATCH] build fix after d1dc0e2 (cherry picked from commit c0f8e8535a025b29557385c95338b642fbda39e8) --- src/common/Utilities/Containers.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/common/Utilities/Containers.h b/src/common/Utilities/Containers.h index 01ffac76769..4d376a8eb38 100644 --- a/src/common/Utilities/Containers.h +++ b/src/common/Utilities/Containers.h @@ -18,6 +18,7 @@ #ifndef TRINITY_CONTAINERS_H #define TRINITY_CONTAINERS_H +#include "advstd.h" #include "Define.h" #include "Random.h" #include @@ -273,6 +274,34 @@ namespace Trinity } } + template + std::enable_if_t().begin())>, void> EraseIf(Container& c, Predicate p) + { + auto wpos = c.begin(); + for (auto rpos = c.begin(), end = c.end(); rpos != end; ++rpos) + { + if (!p(*rpos)) + { + if (rpos != wpos) + std::swap(*rpos, *wpos); + ++wpos; + } + } + c.erase(wpos, c.end()); + } + + template + std::enable_if_t().begin())>, void> EraseIf(Container& c, Predicate p) + { + for (auto it = c.begin(); it != c.end();) + { + if (p(*it)) + it = c.erase(it); + else + ++it; + } + } + /** * Returns a mutable reference to element at index i * Will resize vector if neccessary to ensure element at i can be safely written