diff --git a/llvm/include/llvm/ADT/DenseMap.h b/llvm/include/llvm/ADT/DenseMap.h index 156894aa7f0e3..643dee98f0e28 100644 --- a/llvm/include/llvm/ADT/DenseMap.h +++ b/llvm/include/llvm/ADT/DenseMap.h @@ -257,22 +257,13 @@ class DenseMapBase : public DebugEpochBase { std::pair try_emplace(KeyT &&Key, Ts &&...Args) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) - return std::make_pair(makeIterator(TheBucket, - shouldReverseIterate() - ? getBuckets() - : getBucketsEnd(), - *this, true), + return std::make_pair(makeInsertIterator(TheBucket), false); // Already in map. // Otherwise, insert the new element. TheBucket = InsertIntoBucket(TheBucket, std::move(Key), std::forward(Args)...); - return std::make_pair(makeIterator(TheBucket, - shouldReverseIterate() - ? getBuckets() - : getBucketsEnd(), - *this, true), - true); + return std::make_pair(makeInsertIterator(TheBucket), true); } // Inserts key,value pair into the map if the key isn't already in the map. @@ -282,21 +273,12 @@ class DenseMapBase : public DebugEpochBase { std::pair try_emplace(const KeyT &Key, Ts &&...Args) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) - return std::make_pair(makeIterator(TheBucket, - shouldReverseIterate() - ? getBuckets() - : getBucketsEnd(), - *this, true), + return std::make_pair(makeInsertIterator(TheBucket), false); // Already in map. // Otherwise, insert the new element. TheBucket = InsertIntoBucket(TheBucket, Key, std::forward(Args)...); - return std::make_pair(makeIterator(TheBucket, - shouldReverseIterate() - ? getBuckets() - : getBucketsEnd(), - *this, true), - true); + return std::make_pair(makeInsertIterator(TheBucket), true); } /// Alternate version of insert() which allows a different, and possibly @@ -309,22 +291,13 @@ class DenseMapBase : public DebugEpochBase { const LookupKeyT &Val) { BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) - return std::make_pair(makeIterator(TheBucket, - shouldReverseIterate() - ? getBuckets() - : getBucketsEnd(), - *this, true), + return std::make_pair(makeInsertIterator(TheBucket), false); // Already in map. // Otherwise, insert the new element. TheBucket = InsertIntoBucketWithLookup(TheBucket, std::move(KV.first), std::move(KV.second), Val); - return std::make_pair(makeIterator(TheBucket, - shouldReverseIterate() - ? getBuckets() - : getBucketsEnd(), - *this, true), - true); + return std::make_pair(makeInsertIterator(TheBucket), true); } /// insert - Range insertion of pairs. @@ -545,6 +518,13 @@ class DenseMapBase : public DebugEpochBase { return const_iterator(P, E, Epoch, NoAdvance); } + iterator makeInsertIterator(BucketT *TheBucket) { + return makeIterator(TheBucket, + shouldReverseIterate() ? getBuckets() + : getBucketsEnd(), + *this, true); + } + unsigned getNumEntries() const { return static_cast(this)->getNumEntries(); }