@@ -427,42 +427,34 @@ StringRef swift::matchLeadingTypeName(StringRef name,
427
427
// ending of the type name.
428
428
auto nameWords = camel_case::getWords (name);
429
429
auto typeWords = camel_case::getWords (typeName.Name );
430
- auto nameWordIter = nameWords.begin (),
431
- nameWordIterEnd = nameWords.end ();
432
- auto typeWordRevIter = typeWords.rbegin (),
433
- typeWordRevIterEnd = typeWords.rend ();
430
+ auto nameWordIter = nameWords.begin ();
431
+ auto typeWordRevIter = typeWords.rbegin ();
434
432
435
433
// Find the last instance of the first word in the name within
436
434
// the words in the type name.
437
- typeWordRevIter = std::find_if (typeWordRevIter, typeWordRevIterEnd,
438
- [nameWordIter](StringRef word) {
439
- return matchNameWordToTypeWord (*nameWordIter, word);
440
- });
435
+ typeWordRevIter = std::find_if (
436
+ typeWordRevIter, typeWords. rend (), [nameWordIter](StringRef word) {
437
+ return matchNameWordToTypeWord (*nameWordIter, word);
438
+ });
441
439
442
440
// If we didn't find the first word in the name at all, we're
443
441
// done.
444
- if (typeWordRevIter == typeWordRevIterEnd )
442
+ if (typeWordRevIter == typeWords. rend () )
445
443
return name;
446
444
447
445
// Now, match from the first word up until the end of the type name.
448
- auto typeWordIter = typeWordRevIter.base (),
449
- typeWordIterEnd = typeWords.end ();
450
- ++nameWordIter;
451
-
452
- // FIXME: Use std::mismatch once we update to C++14.
453
- while (typeWordIter != typeWordIterEnd &&
454
- nameWordIter != nameWordIterEnd &&
455
- matchNameWordToTypeWord (*nameWordIter, *typeWordIter)) {
456
- ++typeWordIter;
457
- ++nameWordIter;
458
- }
446
+ std::advance (nameWordIter, 1 );
447
+ WordIterator typeMismatch = typeWords.end (), nameMismatch = nameWords.end ();
448
+ std::tie (typeMismatch, nameMismatch) =
449
+ std::mismatch (typeWordRevIter.base (), typeWords.end (), nameWordIter,
450
+ nameWords.end (), matchNameWordToTypeWord);
459
451
460
452
// If we didn't reach the end of the type name, don't match.
461
- if (typeWordIter != typeWordIterEnd )
453
+ if (typeMismatch != typeWords. end () )
462
454
return name;
463
455
464
456
// Chop of the beginning of the name.
465
- return nameWordIter .getRestOfStr ();
457
+ return nameMismatch .getRestOfStr ();
466
458
}
467
459
468
460
StringRef StringScratchSpace::copyString (StringRef string) {
0 commit comments