[PATCH] D96134: [ADT] Allow SmallPtrSet to be used with a std::insert_iterator

Aaron Ballman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 5 13:03:38 PST 2021


aaron.ballman updated this revision to Diff 321857.
aaron.ballman added a comment.

Updating based on review feedback.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96134/new/

https://reviews.llvm.org/D96134

Files:
  llvm/include/llvm/ADT/SmallPtrSet.h
  llvm/unittests/ADT/SmallPtrSetTest.cpp


Index: llvm/unittests/ADT/SmallPtrSetTest.cpp
===================================================================
--- llvm/unittests/ADT/SmallPtrSetTest.cpp
+++ llvm/unittests/ADT/SmallPtrSetTest.cpp
@@ -395,3 +395,16 @@
   EXPECT_TRUE(Set.contains(&buf[1]));
   EXPECT_TRUE(Set.contains(&buf[2]));
 }
+
+TEST(SmallPtrSetTest, InsertIterator) {
+  SmallPtrSet<int *, 5> Set;
+  int Vals[5] = {11, 22, 33, 44, 55};
+  int *Buf[5] = {&Vals[0], &Vals[1], &Vals[2], &Vals[3], &Vals[4]};
+
+  for (int *Ptr : Buf)
+    Set.insert(Set.begin(), Ptr);
+
+  // Ensure that all of the values were copied into the set.
+  for (const auto *Ptr : Buf)
+    EXPECT_TRUE(Set.contains(Ptr));
+}
Index: llvm/include/llvm/ADT/SmallPtrSet.h
===================================================================
--- llvm/include/llvm/ADT/SmallPtrSet.h
+++ llvm/include/llvm/ADT/SmallPtrSet.h
@@ -366,6 +366,13 @@
     return std::make_pair(makeIterator(p.first), p.second);
   }
 
+  /// Insert the given pointer with an iterator hint that is ignored. This is
+  /// identical to calling insert(Ptr), but allows SmallPtrSet to be used by
+  /// std::insert_iterator and std::inserter().
+  iterator insert(iterator, PtrType Ptr) {
+    return insert(Ptr).first;
+  }
+
   /// erase - If the set contains the specified pointer, remove it and return
   /// true, otherwise return false.
   bool erase(PtrType Ptr) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96134.321857.patch
Type: text/x-patch
Size: 1392 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210205/4d62c447/attachment.bin>


More information about the llvm-commits mailing list