@@ -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