Skip to content

Commit 17a2bc5

Browse files
committed
[NFC] Use std::mismatch Now That We Live In The Future
1 parent 2cf7d63 commit 17a2bc5

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

lib/Basic/StringExtras.cpp

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -427,42 +427,34 @@ StringRef swift::matchLeadingTypeName(StringRef name,
427427
// ending of the type name.
428428
auto nameWords = camel_case::getWords(name);
429429
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();
434432

435433
// Find the last instance of the first word in the name within
436434
// 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+
});
441439

442440
// If we didn't find the first word in the name at all, we're
443441
// done.
444-
if (typeWordRevIter == typeWordRevIterEnd)
442+
if (typeWordRevIter == typeWords.rend())
445443
return name;
446444

447445
// 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);
459451

460452
// If we didn't reach the end of the type name, don't match.
461-
if (typeWordIter != typeWordIterEnd)
453+
if (typeMismatch != typeWords.end())
462454
return name;
463455

464456
// Chop of the beginning of the name.
465-
return nameWordIter.getRestOfStr();
457+
return nameMismatch.getRestOfStr();
466458
}
467459

468460
StringRef StringScratchSpace::copyString(StringRef string) {

0 commit comments

Comments
 (0)