Skip to content

Commit e10b619

Browse files
[ADT] Add a helper function to create iterators in DenseMap (NFC) (#155133)
This patch adds a private helper function, makeInsertIterator, to encapsulate the logic for creating iterators within functions like try_emplace and insert. This refactoring reduces code duplication and improves readability at the call sites.
1 parent 6074335 commit e10b619

File tree

1 file changed

+13
-33
lines changed

1 file changed

+13
-33
lines changed

llvm/include/llvm/ADT/DenseMap.h

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -257,22 +257,13 @@ class DenseMapBase : public DebugEpochBase {
257257
std::pair<iterator, bool> try_emplace(KeyT &&Key, Ts &&...Args) {
258258
BucketT *TheBucket;
259259
if (LookupBucketFor(Key, TheBucket))
260-
return std::make_pair(makeIterator(TheBucket,
261-
shouldReverseIterate<KeyT>()
262-
? getBuckets()
263-
: getBucketsEnd(),
264-
*this, true),
260+
return std::make_pair(makeInsertIterator(TheBucket),
265261
false); // Already in map.
266262

267263
// Otherwise, insert the new element.
268264
TheBucket =
269265
InsertIntoBucket(TheBucket, std::move(Key), std::forward<Ts>(Args)...);
270-
return std::make_pair(makeIterator(TheBucket,
271-
shouldReverseIterate<KeyT>()
272-
? getBuckets()
273-
: getBucketsEnd(),
274-
*this, true),
275-
true);
266+
return std::make_pair(makeInsertIterator(TheBucket), true);
276267
}
277268

278269
// Inserts key,value pair into the map if the key isn't already in the map.
@@ -282,21 +273,12 @@ class DenseMapBase : public DebugEpochBase {
282273
std::pair<iterator, bool> try_emplace(const KeyT &Key, Ts &&...Args) {
283274
BucketT *TheBucket;
284275
if (LookupBucketFor(Key, TheBucket))
285-
return std::make_pair(makeIterator(TheBucket,
286-
shouldReverseIterate<KeyT>()
287-
? getBuckets()
288-
: getBucketsEnd(),
289-
*this, true),
276+
return std::make_pair(makeInsertIterator(TheBucket),
290277
false); // Already in map.
291278

292279
// Otherwise, insert the new element.
293280
TheBucket = InsertIntoBucket(TheBucket, Key, std::forward<Ts>(Args)...);
294-
return std::make_pair(makeIterator(TheBucket,
295-
shouldReverseIterate<KeyT>()
296-
? getBuckets()
297-
: getBucketsEnd(),
298-
*this, true),
299-
true);
281+
return std::make_pair(makeInsertIterator(TheBucket), true);
300282
}
301283

302284
/// Alternate version of insert() which allows a different, and possibly
@@ -309,22 +291,13 @@ class DenseMapBase : public DebugEpochBase {
309291
const LookupKeyT &Val) {
310292
BucketT *TheBucket;
311293
if (LookupBucketFor(Val, TheBucket))
312-
return std::make_pair(makeIterator(TheBucket,
313-
shouldReverseIterate<KeyT>()
314-
? getBuckets()
315-
: getBucketsEnd(),
316-
*this, true),
294+
return std::make_pair(makeInsertIterator(TheBucket),
317295
false); // Already in map.
318296

319297
// Otherwise, insert the new element.
320298
TheBucket = InsertIntoBucketWithLookup(TheBucket, std::move(KV.first),
321299
std::move(KV.second), Val);
322-
return std::make_pair(makeIterator(TheBucket,
323-
shouldReverseIterate<KeyT>()
324-
? getBuckets()
325-
: getBucketsEnd(),
326-
*this, true),
327-
true);
300+
return std::make_pair(makeInsertIterator(TheBucket), true);
328301
}
329302

330303
/// insert - Range insertion of pairs.
@@ -545,6 +518,13 @@ class DenseMapBase : public DebugEpochBase {
545518
return const_iterator(P, E, Epoch, NoAdvance);
546519
}
547520

521+
iterator makeInsertIterator(BucketT *TheBucket) {
522+
return makeIterator(TheBucket,
523+
shouldReverseIterate<KeyT>() ? getBuckets()
524+
: getBucketsEnd(),
525+
*this, true);
526+
}
527+
548528
unsigned getNumEntries() const {
549529
return static_cast<const DerivedT *>(this)->getNumEntries();
550530
}

0 commit comments

Comments
 (0)