@@ -257,22 +257,13 @@ class DenseMapBase : public DebugEpochBase {
257
257
std::pair<iterator, bool > try_emplace (KeyT &&Key, Ts &&...Args) {
258
258
BucketT *TheBucket;
259
259
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),
265
261
false ); // Already in map.
266
262
267
263
// Otherwise, insert the new element.
268
264
TheBucket =
269
265
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 );
276
267
}
277
268
278
269
// Inserts key,value pair into the map if the key isn't already in the map.
@@ -282,21 +273,12 @@ class DenseMapBase : public DebugEpochBase {
282
273
std::pair<iterator, bool > try_emplace (const KeyT &Key, Ts &&...Args) {
283
274
BucketT *TheBucket;
284
275
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),
290
277
false ); // Already in map.
291
278
292
279
// Otherwise, insert the new element.
293
280
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 );
300
282
}
301
283
302
284
// / Alternate version of insert() which allows a different, and possibly
@@ -309,22 +291,13 @@ class DenseMapBase : public DebugEpochBase {
309
291
const LookupKeyT &Val) {
310
292
BucketT *TheBucket;
311
293
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),
317
295
false ); // Already in map.
318
296
319
297
// Otherwise, insert the new element.
320
298
TheBucket = InsertIntoBucketWithLookup (TheBucket, std::move (KV.first ),
321
299
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 );
328
301
}
329
302
330
303
// / insert - Range insertion of pairs.
@@ -545,6 +518,13 @@ class DenseMapBase : public DebugEpochBase {
545
518
return const_iterator (P, E, Epoch, NoAdvance);
546
519
}
547
520
521
+ iterator makeInsertIterator (BucketT *TheBucket) {
522
+ return makeIterator (TheBucket,
523
+ shouldReverseIterate<KeyT>() ? getBuckets ()
524
+ : getBucketsEnd (),
525
+ *this , true );
526
+ }
527
+
548
528
unsigned getNumEntries () const {
549
529
return static_cast <const DerivedT *>(this )->getNumEntries ();
550
530
}
0 commit comments