<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Dec 26, 2016 at 3:28 PM Chandler Carruth via Phabricator via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">chandlerc created this revision.<br class="gmail_msg">
chandlerc added a reviewer: aaron.ballman.<br class="gmail_msg">
chandlerc added a subscriber: llvm-commits.<br class="gmail_msg">
Herald added a subscriber: mcrosier.<br class="gmail_msg">
<br class="gmail_msg">
What it says on the tin...<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D28120" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D28120</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  include/llvm/ADT/STLExtras.h<br class="gmail_msg">
  unittests/ADT/STLExtrasTest.cpp<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Index: unittests/ADT/STLExtrasTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- unittests/ADT/STLExtrasTest.cpp<br class="gmail_msg">
+++ unittests/ADT/STLExtrasTest.cpp<br class="gmail_msg">
@@ -297,4 +297,15 @@<br class="gmail_msg">
   EXPECT_EQ(7, V[7]);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+TEST(STLExtrasTest, EraseIf) {<br class="gmail_msg">
+  std::vector<int> V = {1, 2, 3, 4, 5, 6, 7, 8};<br class="gmail_msg">
+<br class="gmail_msg">
+  erase_if(V, [](int i) { return i % 2 == 0; });<br class="gmail_msg">
+  EXPECT_EQ(4u, V.size());<br class="gmail_msg">
+  EXPECT_EQ(1, V[0]);<br class="gmail_msg">
+  EXPECT_EQ(3, V[1]);<br class="gmail_msg">
+  EXPECT_EQ(5, V[2]);<br class="gmail_msg">
+  EXPECT_EQ(7, V[3]);<br class="gmail_msg"></blockquote><div><br></div><div>I'd suggest simplifying the test case a bit (making it smaller, at least - doesn't seem like all 4 output values are interesting - probably only a vector of length 3-4 would suffice, rather than 8. Less repetitious on the EXPECTs too)<br><br>Up to you, though.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 }<br class="gmail_msg">
Index: include/llvm/ADT/STLExtras.h<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- include/llvm/ADT/STLExtras.h<br class="gmail_msg">
+++ include/llvm/ADT/STLExtras.h<br class="gmail_msg">
@@ -815,6 +815,18 @@<br class="gmail_msg">
   return std::partition(std::begin(Range), std::end(Range), P);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+/// Provide a container algorithm similar to C++ Library Fundamentals v2's<br class="gmail_msg">
+/// `erase_if` which is equivalent to;<br class="gmail_msg">
+///<br class="gmail_msg">
+///   C.erase(remove_if(C, pred), C.end());<br class="gmail_msg">
+///<br class="gmail_msg">
+/// This version works for any container with an erase method call accepting<br class="gmail_msg">
+/// two iterators.<br class="gmail_msg">
+template <typename Container, typename UnaryPredicate><br class="gmail_msg">
+void erase_if(Container &C, UnaryPredicate P) {<br class="gmail_msg">
+  C.erase(remove_if(C, P), C.end());<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 //===----------------------------------------------------------------------===//<br class="gmail_msg">
 //     Extra additions to <memory><br class="gmail_msg">
 //===----------------------------------------------------------------------===//<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div></div>