Skip to content

Commit fc38982

Browse files
[ADT] Add SetVector::insert_range (#131715)
This patch adds SetVector::insert_range for consistency with DenseSet::insert_range and std::set::insert_range from C++23.
1 parent 1fbfef9 commit fc38982

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

llvm/include/llvm/ADT/SetVector.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#ifndef LLVM_ADT_SETVECTOR_H
2121
#define LLVM_ADT_SETVECTOR_H
2222

23+
#include "llvm/ADT/ADL.h"
2324
#include "llvm/ADT/ArrayRef.h"
2425
#include "llvm/ADT/DenseSet.h"
2526
#include "llvm/ADT/STLExtras.h"
@@ -184,6 +185,10 @@ class SetVector {
184185
insert(*Start);
185186
}
186187

188+
template <typename Range> void insert_range(Range &&R) {
189+
insert(adl_begin(R), adl_end(R));
190+
}
191+
187192
/// Remove an item from the set vector.
188193
bool remove(const value_type& X) {
189194
if constexpr (canBeSmall())

llvm/unittests/ADT/SetVectorTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "llvm/ADT/SetVector.h"
1414
#include "llvm/ADT/SmallPtrSet.h"
15+
#include "gmock/gmock.h"
1516
#include "gtest/gtest.h"
1617

1718
using namespace llvm;
@@ -86,3 +87,10 @@ TEST(SetVector, ConstPtrKeyTest) {
8687
EXPECT_FALSE(S.contains(&j));
8788
EXPECT_FALSE(S.contains((const int *)&j));
8889
}
90+
91+
TEST(SetVector, InsertRange) {
92+
SetVector<unsigned> Set;
93+
constexpr unsigned Args[] = {3, 1, 2};
94+
Set.insert_range(Args);
95+
EXPECT_THAT(Set, ::testing::ElementsAre(3, 1, 2));
96+
}

0 commit comments

Comments
 (0)