[PATCH] D28120: [ADT] Add an llvm::erase_if utility to make the standard erase+remove_if pattern easier to write.

Chandler Carruth via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 26 15:41:23 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL290555: [ADT] Add an llvm::erase_if utility to make the standard erase+remove_if (authored by chandlerc).

Changed prior to commit:
  https://reviews.llvm.org/D28120?vs=82520&id=82523#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D28120

Files:
  llvm/trunk/include/llvm/ADT/STLExtras.h
  llvm/trunk/unittests/ADT/STLExtrasTest.cpp


Index: llvm/trunk/include/llvm/ADT/STLExtras.h
===================================================================
--- llvm/trunk/include/llvm/ADT/STLExtras.h
+++ llvm/trunk/include/llvm/ADT/STLExtras.h
@@ -815,6 +815,18 @@
   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>
 //===----------------------------------------------------------------------===//
Index: llvm/trunk/unittests/ADT/STLExtrasTest.cpp
===================================================================
--- llvm/trunk/unittests/ADT/STLExtrasTest.cpp
+++ llvm/trunk/unittests/ADT/STLExtrasTest.cpp
@@ -297,4 +297,15 @@
   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]);
+}
+
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28120.82523.patch
Type: text/x-patch
Size: 1434 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161226/edc08a77/attachment.bin>


More information about the llvm-commits mailing list