Skip to content

Commit 4ce1d1f

Browse files
[ADT] Add DenseSet::insert_range (llvm#131567)
This pach adds DenseSet::insert_range, named after std::map::insert_range from C++23. The intent is to allow a heavy operation as the argument like: Set.insert_range(Map[Key]); Without insert_range, we would have to do: Set.insert(Map[Key].begin(), Map[Key].end()); or: auto &M = Map[Key]; Set.insert(M.begin(), M.end()); Neither is elegant.
1 parent e3ef5f2 commit 4ce1d1f

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

llvm/include/llvm/ADT/DenseSet.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#ifndef LLVM_ADT_DENSESET_H
1515
#define LLVM_ADT_DENSESET_H
1616

17+
#include "llvm/ADT/ADL.h"
1718
#include "llvm/ADT/DenseMap.h"
1819
#include "llvm/ADT/DenseMapInfo.h"
1920
#include "llvm/Support/MathExtras.h"
@@ -237,6 +238,10 @@ class DenseSetImpl {
237238
for (; I != E; ++I)
238239
insert(*I);
239240
}
241+
242+
template <typename Range> void insert_range(Range &&R) {
243+
insert(adl_begin(R), adl_end(R));
244+
}
240245
};
241246

242247
/// Equality comparison for DenseSet.

llvm/unittests/ADT/DenseSetTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "llvm/ADT/DenseSet.h"
10+
#include "gmock/gmock.h"
1011
#include "gtest/gtest.h"
1112
#include <type_traits>
1213

@@ -32,6 +33,13 @@ TEST(DenseSetTest, DoubleEntrySetTest) {
3233
EXPECT_EQ(0u, set.count(2));
3334
}
3435

36+
TEST(DenseSetTest, InsertRange) {
37+
llvm::DenseSet<unsigned> set;
38+
constexpr unsigned Args[] = {3, 1, 2};
39+
set.insert_range(Args);
40+
EXPECT_THAT(set, ::testing::UnorderedElementsAre(1, 2, 3));
41+
}
42+
3543
struct TestDenseSetInfo {
3644
static inline unsigned getEmptyKey() { return ~0; }
3745
static inline unsigned getTombstoneKey() { return ~0U - 1; }

0 commit comments

Comments
 (0)