[llvm] a08673d - Add a range-based wrapper for std::unique(begin, end, binary_predicate)

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon May 24 17:26:56 PDT 2021


Author: David Blaikie
Date: 2021-05-24T17:26:46-07:00
New Revision: a08673d04a99efe200fb53f3ef57b5cfb8e513bb

URL: https://github.com/llvm/llvm-project/commit/a08673d04a99efe200fb53f3ef57b5cfb8e513bb
DIFF: https://github.com/llvm/llvm-project/commit/a08673d04a99efe200fb53f3ef57b5cfb8e513bb.diff

LOG: Add a range-based wrapper for std::unique(begin, end, binary_predicate)

Added: 
    

Modified: 
    llvm/include/llvm/ADT/STLExtras.h
    llvm/unittests/ADT/STLExtrasTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index 182451c25e32d..430da0f42348b 100644
--- a/llvm/include/llvm/ADT/STLExtras.h
+++ b/llvm/include/llvm/ADT/STLExtras.h
@@ -1631,6 +1631,11 @@ auto partition_point(R &&Range, Predicate P) {
   return std::partition_point(adl_begin(Range), adl_end(Range), P);
 }
 
+template<typename Range, typename Predicate>
+auto unique(Range &&R, Predicate P) {
+  return std::unique(adl_begin(R), adl_end(R), P);
+}
+
 /// Wrapper function around std::equal to detect if all elements
 /// in a container are same.
 template <typename R>

diff  --git a/llvm/unittests/ADT/STLExtrasTest.cpp b/llvm/unittests/ADT/STLExtrasTest.cpp
index 8626530554172..582f18229b1ed 100644
--- a/llvm/unittests/ADT/STLExtrasTest.cpp
+++ b/llvm/unittests/ADT/STLExtrasTest.cpp
@@ -711,4 +711,18 @@ TEST(STLExtras, MoveRange) {
   EXPECT_EQ(V4.size(), 4U);
   EXPECT_TRUE(llvm::all_of(V4, HasVal));
 }
+
+TEST(STLExtras, Unique) {
+  std::vector<int> V = {1, 5, 5, 4, 3, 3, 3};
+
+  auto I = llvm::unique(V, [](int a, int b) { return a == b; });
+
+  EXPECT_EQ(I, V.begin() + 4);
+
+  EXPECT_EQ(1, V[0]);
+  EXPECT_EQ(5, V[1]);
+  EXPECT_EQ(4, V[2]);
+  EXPECT_EQ(3, V[3]);
+}
+
 } // namespace


        


More information about the llvm-commits mailing list