mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-18 18:42:46 +02:00
[ADT] Add an llvm::erase_if utility to make the standard erase+remove_if
pattern easier to write. Differential Revision: https://reviews.llvm.org/D28120 llvm-svn: 290555
This commit is contained in:
parent
7e05f66baa
commit
fa1ce92db5
@ -815,6 +815,18 @@ auto partition(R &&Range, UnaryPredicate P) -> decltype(std::begin(Range)) {
|
||||
return std::partition(std::begin(Range), std::end(Range), P);
|
||||
}
|
||||
|
||||
/// Provide a container algorithm similar to C++ Library Fundamentals v2's
|
||||
/// `erase_if` which is equivalent to:
|
||||
///
|
||||
/// C.erase(remove_if(C, pred), C.end());
|
||||
///
|
||||
/// This version works for any container with an erase method call accepting
|
||||
/// two iterators.
|
||||
template <typename Container, typename UnaryPredicate>
|
||||
void erase_if(Container &C, UnaryPredicate P) {
|
||||
C.erase(remove_if(C, P), C.end());
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Extra additions to <memory>
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -297,4 +297,15 @@ TEST(STLExtrasTest, PartitionAdaptor) {
|
||||
EXPECT_EQ(7, V[7]);
|
||||
}
|
||||
|
||||
TEST(STLExtrasTest, EraseIf) {
|
||||
std::vector<int> V = {1, 2, 3, 4, 5, 6, 7, 8};
|
||||
|
||||
erase_if(V, [](int i) { return i % 2 == 0; });
|
||||
EXPECT_EQ(4u, V.size());
|
||||
EXPECT_EQ(1, V[0]);
|
||||
EXPECT_EQ(3, V[1]);
|
||||
EXPECT_EQ(5, V[2]);
|
||||
EXPECT_EQ(7, V[3]);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user