diff options
Diffstat (limited to 'src/libs/utils/differ.cpp')
-rw-r--r-- | src/libs/utils/differ.cpp | 177 |
1 files changed, 88 insertions, 89 deletions
diff --git a/src/libs/utils/differ.cpp b/src/libs/utils/differ.cpp index 9dc2ce8454..f929efbeeb 100644 --- a/src/libs/utils/differ.cpp +++ b/src/libs/utils/differ.cpp @@ -24,8 +24,8 @@ namespace Utils { static int commonPrefix(const QString &text1, const QString &text2) { int i = 0; - const int text1Count = text1.count(); - const int text2Count = text2.count(); + const int text1Count = text1.size(); + const int text2Count = text2.size(); const int maxCount = qMin(text1Count, text2Count); while (i < maxCount) { if (text1.at(i) != text2.at(i)) @@ -38,8 +38,8 @@ static int commonPrefix(const QString &text1, const QString &text2) static int commonSuffix(const QString &text1, const QString &text2) { int i = 0; - const int text1Count = text1.count(); - const int text2Count = text2.count(); + const int text1Count = text1.size(); + const int text2Count = text2.size(); const int maxCount = qMin(text1Count, text2Count); while (i < maxCount) { if (text1.at(text1Count - i - 1) != text2.at(text2Count - i - 1)) @@ -52,8 +52,8 @@ static int commonSuffix(const QString &text1, const QString &text2) static int commonOverlap(const QString &text1, const QString &text2) { int i = 0; - const int text1Count = text1.count(); - const int text2Count = text2.count(); + const int text1Count = text1.size(); + const int text2Count = text2.size(); const int maxCount = qMin(text1Count, text2Count); while (i < maxCount) { if (QStringView(text1).mid(text1Count - maxCount + i) == QStringView(text2).left(maxCount - i)) @@ -66,7 +66,7 @@ static int commonOverlap(const QString &text1, const QString &text2) static QList<Diff> decode(const QList<Diff> &diffList, const QStringList &lines) { QList<Diff> newDiffList; - newDiffList.reserve(diffList.count()); + newDiffList.reserve(diffList.size()); for (const Diff &diff : diffList) { QString text; for (QChar c : diff.text) { @@ -80,7 +80,7 @@ static QList<Diff> decode(const QList<Diff> &diffList, const QStringList &lines) static QList<Diff> squashEqualities(const QList<Diff> &diffList) { - if (diffList.count() < 3) // we need at least 3 items + if (diffList.size() < 3) // we need at least 3 items return diffList; QList<Diff> newDiffList; @@ -88,20 +88,20 @@ static QList<Diff> squashEqualities(const QList<Diff> &diffList) Diff thisDiff = diffList.at(1); Diff nextDiff = diffList.at(2); int i = 2; - while (i < diffList.count()) { + while (i < diffList.size()) { if (prevDiff.command == Diff::Equal && nextDiff.command == Diff::Equal) { if (thisDiff.text.endsWith(prevDiff.text)) { thisDiff.text = prevDiff.text - + thisDiff.text.left(thisDiff.text.count() - - prevDiff.text.count()); + + thisDiff.text.left(thisDiff.text.size() + - prevDiff.text.size()); nextDiff.text = prevDiff.text + nextDiff.text; } else if (thisDiff.text.startsWith(nextDiff.text)) { prevDiff.text += nextDiff.text; - thisDiff.text = thisDiff.text.mid(nextDiff.text.count()) + thisDiff.text = thisDiff.text.mid(nextDiff.text.size()) + nextDiff.text; i++; - if (i < diffList.count()) + if (i < diffList.size()) nextDiff = diffList.at(i); newDiffList.append(prevDiff); } else { @@ -113,11 +113,11 @@ static QList<Diff> squashEqualities(const QList<Diff> &diffList) prevDiff = thisDiff; thisDiff = nextDiff; i++; - if (i < diffList.count()) + if (i < diffList.size()) nextDiff = diffList.at(i); } newDiffList.append(prevDiff); - if (i == diffList.count()) + if (i == diffList.size()) newDiffList.append(thisDiff); return newDiffList; } @@ -132,9 +132,9 @@ static QList<Diff> cleanupOverlaps(const QList<Diff> &diffList) // DEL(XXXXABC), INS(DEFXXXX) -> INS(DEF), EQ(XXXX), DEL(ABC) QList<Diff> newDiffList; int i = 0; - while (i < diffList.count()) { + while (i < diffList.size()) { Diff thisDiff = diffList.at(i); - Diff nextDiff = i < diffList.count() - 1 + Diff nextDiff = i < diffList.size() - 1 ? diffList.at(i + 1) : Diff(Diff::Equal); if (thisDiff.command == Diff::Delete @@ -142,9 +142,9 @@ static QList<Diff> cleanupOverlaps(const QList<Diff> &diffList) const int delInsOverlap = commonOverlap(thisDiff.text, nextDiff.text); const int insDelOverlap = commonOverlap(nextDiff.text, thisDiff.text); if (delInsOverlap >= insDelOverlap) { - if (delInsOverlap > thisDiff.text.count() / 2 - || delInsOverlap > nextDiff.text.count() / 2) { - thisDiff.text = thisDiff.text.left(thisDiff.text.count() - delInsOverlap); + if (delInsOverlap > thisDiff.text.size() / 2 + || delInsOverlap > nextDiff.text.size() / 2) { + thisDiff.text = thisDiff.text.left(thisDiff.text.size() - delInsOverlap); const Diff equality(Diff::Equal, nextDiff.text.left(delInsOverlap)); nextDiff.text = nextDiff.text.mid(delInsOverlap); newDiffList.append(thisDiff); @@ -155,9 +155,9 @@ static QList<Diff> cleanupOverlaps(const QList<Diff> &diffList) newDiffList.append(nextDiff); } } else { - if (insDelOverlap > thisDiff.text.count() / 2 - || insDelOverlap > nextDiff.text.count() / 2) { - nextDiff.text = nextDiff.text.left(nextDiff.text.count() - insDelOverlap); + if (insDelOverlap > thisDiff.text.size() / 2 + || insDelOverlap > nextDiff.text.size() / 2) { + nextDiff.text = nextDiff.text.left(nextDiff.text.size() - insDelOverlap); const Diff equality(Diff::Equal, thisDiff.text.left(insDelOverlap)); thisDiff.text = thisDiff.text.mid(insDelOverlap); newDiffList.append(nextDiff); @@ -186,7 +186,7 @@ static int cleanupSemanticsScore(const QString &text1, const QString &text2) if (text1.isEmpty() || text2.isEmpty()) // Edges return 6; - const QChar char1 = text1[text1.count() - 1]; + const QChar char1 = text1[text1.size() - 1]; const QChar char2 = text2[0]; const bool nonAlphaNumeric1 = !char1.isLetterOrNumber(); const bool nonAlphaNumeric2 = !char2.isLetterOrNumber(); @@ -256,19 +256,19 @@ QList<Diff> Differ::moveWhitespaceIntoEqualities(const QList<Diff> &input) { QList<Diff> output = input; - for (int i = 0; i < output.count(); i++) { + for (int i = 0; i < output.size(); i++) { Diff diff = output[i]; if (diff.command != Diff::Equal) { if (i > 0) { // check previous equality Diff &previousDiff = output[i - 1]; - const int previousDiffCount = previousDiff.text.count(); + const int previousDiffCount = previousDiff.text.size(); if (previousDiff.command == Diff::Equal && previousDiffCount && isWhitespace(previousDiff.text.at(previousDiffCount - 1))) { // previous diff ends with whitespace int j = 0; - while (j < diff.text.count()) { + while (j < diff.text.size()) { if (!isWhitespace(diff.text.at(j))) break; ++j; @@ -280,10 +280,10 @@ QList<Diff> Differ::moveWhitespaceIntoEqualities(const QList<Diff> &input) } } } - if (i < output.count() - 1) { // check next equality - const int diffCount = diff.text.count(); + if (i < output.size() - 1) { // check next equality + const int diffCount = diff.text.size(); Diff &nextDiff = output[i + 1]; - const int nextDiffCount = nextDiff.text.count(); + const int nextDiffCount = nextDiff.text.size(); if (nextDiff.command == Diff::Equal && nextDiffCount && (isWhitespace(nextDiff.text.at(0)) || isNewLine(nextDiff.text.at(0)))) { @@ -331,7 +331,7 @@ static QString encodeReducedWhitespace(const QString &input, int inputIndex = 0; int outputIndex = 0; - while (inputIndex < input.count()) { + while (inputIndex < input.size()) { QChar c = input.at(inputIndex); if (isWhitespace(c)) { @@ -339,7 +339,7 @@ static QString encodeReducedWhitespace(const QString &input, codeMap->insert(outputIndex, QString(c)); ++inputIndex; - while (inputIndex < input.count()) { + while (inputIndex < input.size()) { QChar reducedChar = input.at(inputIndex); if (!isWhitespace(reducedChar)) @@ -372,10 +372,10 @@ static QList<Diff> decodeReducedWhitespace(const QList<Diff> &input, auto it = codeMap.constBegin(); const auto itEnd = codeMap.constEnd(); for (Diff diff : input) { - const int diffCount = diff.text.count(); + const int diffCount = diff.text.size(); while ((it != itEnd) && (it.key() < counter + diffCount)) { const int reversePosition = diffCount + counter - it.key(); - const int updatedDiffCount = diff.text.count(); + const int updatedDiffCount = diff.text.size(); diff.text.replace(updatedDiffCount - reversePosition, 1, it.value()); ++it; } @@ -502,8 +502,8 @@ static QString encodeExpandedWhitespace(const QString &leftEquality, rightCodeMap->clear(); QString output; - const int leftCount = leftEquality.count(); - const int rightCount = rightEquality.count(); + const int leftCount = leftEquality.size(); + const int rightCount = rightEquality.size(); int leftIndex = 0; int rightIndex = 0; while (leftIndex < leftCount && rightIndex < rightCount) { @@ -534,8 +534,8 @@ static QString encodeExpandedWhitespace(const QString &leftEquality, } if (!leftWhitespaces.isEmpty() && !rightWhitespaces.isEmpty()) { - const int replacementPosition = output.count(); - const int replacementSize = qMax(leftWhitespaces.count(), rightWhitespaces.count()); + const int replacementPosition = output.size(); + const int replacementSize = qMax(leftWhitespaces.size(), rightWhitespaces.size()); const QString replacement(replacementSize, ' '); leftCodeMap->insert(replacementPosition, {replacementSize, leftWhitespaces}); rightCodeMap->insert(replacementPosition, {replacementSize, rightWhitespaces}); @@ -574,14 +574,14 @@ static QList<Diff> decodeExpandedWhitespace(const QList<Diff> &input, auto it = codeMap.constBegin(); const auto itEnd = codeMap.constEnd(); for (Diff diff : input) { - const int diffCount = diff.text.count(); + const int diffCount = diff.text.size(); while ((it != itEnd) && (it.key() < counter + diffCount)) { const int replacementSize = it.value().first; const int reversePosition = diffCount + counter - it.key(); if (reversePosition < replacementSize) return QList<Diff>(); // replacement exceeds one Diff const QString replacement = it.value().second; - const int updatedDiffCount = diff.text.count(); + const int updatedDiffCount = diff.text.size(); diff.text.replace(updatedDiffCount - reversePosition, replacementSize, replacement); ++it; @@ -619,8 +619,8 @@ static bool diffWithWhitespaceExpandedInEqualities(const QList<Diff> &leftInput, leftOutput->clear(); rightOutput->clear(); - const int leftCount = leftInput.count(); - const int rightCount = rightInput.count(); + const int leftCount = leftInput.size(); + const int rightCount = rightInput.size(); int l = 0; int r = 0; @@ -649,10 +649,10 @@ static bool diffWithWhitespaceExpandedInEqualities(const QList<Diff> &leftInput, // join code map positions with common maps for (auto it = leftCodeMap.cbegin(), end = leftCodeMap.cend(); it != end; ++it) - commonLeftCodeMap.insert(leftText.count() + it.key(), it.value()); + commonLeftCodeMap.insert(leftText.size() + it.key(), it.value()); for (auto it = rightCodeMap.cbegin(), end = rightCodeMap.cend(); it != end; ++it) - commonRightCodeMap.insert(rightText.count() + it.key(), it.value()); + commonRightCodeMap.insert(rightText.size() + it.key(), it.value()); leftText.append(commonEquality); rightText.append(commonEquality); @@ -739,8 +739,8 @@ void Differ::ignoreWhitespaceBetweenEqualities(const QList<Diff> &leftInput, leftOutput->clear(); rightOutput->clear(); - const int leftCount = leftInput.count(); - const int rightCount = rightInput.count(); + const int leftCount = leftInput.size(); + const int rightCount = rightInput.size(); int l = 0; int r = 0; @@ -836,8 +836,8 @@ void Differ::diffBetweenEqualities(const QList<Diff> &leftInput, leftOutput->clear(); rightOutput->clear(); - const int leftCount = leftInput.count(); - const int rightCount = rightInput.count(); + const int leftCount = leftInput.size(); + const int rightCount = rightInput.size(); int l = 0; int r = 0; @@ -1000,8 +1000,8 @@ QList<Diff> Differ::preprocess1AndDiff(const QString &text1, const QString &text const int suffixCount = commonSuffix(newText1, newText2); if (suffixCount) { suffix = newText1.right(suffixCount); - newText1 = newText1.left(newText1.count() - suffixCount); - newText2 = newText2.left(newText2.count() - suffixCount); + newText1 = newText1.left(newText1.size() - suffixCount); + newText2 = newText2.left(newText2.size() - suffixCount); } QList<Diff> diffList = preprocess2AndDiff(newText1, newText2); if (prefixCount) @@ -1025,28 +1025,27 @@ QList<Diff> Differ::preprocess2AndDiff(const QString &text1, const QString &text return diffList; } - if (text1.count() != text2.count()) - { - const QString longtext = text1.count() > text2.count() ? text1 : text2; - const QString shorttext = text1.count() > text2.count() ? text2 : text1; + if (text1.size() != text2.size()) { + const QString longtext = text1.size() > text2.size() ? text1 : text2; + const QString shorttext = text1.size() > text2.size() ? text2 : text1; const int i = longtext.indexOf(shorttext); if (i != -1) { - const Diff::Command command = (text1.count() > text2.count()) + const Diff::Command command = (text1.size() > text2.size()) ? Diff::Delete : Diff::Insert; diffList.append(Diff(command, longtext.left(i))); diffList.append(Diff(Diff::Equal, shorttext)); - diffList.append(Diff(command, longtext.mid(i + shorttext.count()))); + diffList.append(Diff(command, longtext.mid(i + shorttext.size()))); return diffList; } - if (shorttext.count() == 1) { + if (shorttext.size() == 1) { diffList.append(Diff(Diff::Delete, text1)); diffList.append(Diff(Diff::Insert, text2)); return diffList; } } - if (m_currentDiffMode != Differ::CharMode && text1.count() > 80 && text2.count() > 80) + if (m_currentDiffMode != Differ::CharMode && text1.size() > 80 && text2.size() > 80) return diffNonCharMode(text1, text2); return diffMyers(text1, text2); @@ -1054,8 +1053,8 @@ QList<Diff> Differ::preprocess2AndDiff(const QString &text1, const QString &text QList<Diff> Differ::diffMyers(const QString &text1, const QString &text2) { - const int n = text1.count(); - const int m = text2.count(); + const int n = text1.size(); + const int m = text2.size(); const bool odd = (n + m) % 2; const int D = odd ? (n + m) / 2 + 1 : (n + m) / 2; const int delta = n - m; @@ -1191,12 +1190,12 @@ QList<Diff> Differ::diffNonCharMode(const QString &text1, const QString &text2) QString lastDelete; QString lastInsert; QList<Diff> newDiffList; - for (int i = 0; i <= diffList.count(); i++) { + for (int i = 0; i <= diffList.size(); i++) { if (m_future && m_future->isCanceled()) { m_currentDiffMode = diffMode; return {}; } - const Diff diffItem = i < diffList.count() + const Diff diffItem = i < diffList.size() ? diffList.at(i) : Diff(Diff::Equal); // dummy, ensure we process to the end // even when diffList doesn't end with equality @@ -1240,14 +1239,14 @@ int Differ::findSubtextEnd(const QString &text, if (m_currentDiffMode == Differ::LineMode) { int subtextEnd = text.indexOf('\n', subtextStart); if (subtextEnd == -1) - subtextEnd = text.count() - 1; + subtextEnd = text.size() - 1; return ++subtextEnd; } else if (m_currentDiffMode == Differ::WordMode) { if (!text.at(subtextStart).isLetter()) return subtextStart + 1; int i = subtextStart + 1; - const int count = text.count(); + const int count = text.size(); while (i < count && text.at(i).isLetter()) i++; return i; @@ -1262,7 +1261,7 @@ QString Differ::encode(const QString &text, int subtextStart = 0; int subtextEnd = -1; QString codes; - while (subtextEnd < text.count()) { + while (subtextEnd < text.size()) { subtextEnd = findSubtextEnd(text, subtextStart); const QString line = text.mid(subtextStart, subtextEnd - subtextStart); subtextStart = subtextEnd; @@ -1271,8 +1270,8 @@ QString Differ::encode(const QString &text, codes += QChar(static_cast<ushort>(lineToCode->value(line))); } else { lines->append(line); - lineToCode->insert(line, lines->count() - 1); - codes += QChar(static_cast<ushort>(lines->count() - 1)); + lineToCode->insert(line, lines->size() - 1); + codes += QChar(static_cast<ushort>(lines->size() - 1)); } } return codes; @@ -1283,8 +1282,8 @@ QList<Diff> Differ::merge(const QList<Diff> &diffList) QString lastDelete; QString lastInsert; QList<Diff> newDiffList; - for (int i = 0; i <= diffList.count(); i++) { - Diff diff = i < diffList.count() + for (int i = 0; i <= diffList.size(); i++) { + Diff diff = i < diffList.size() ? diffList.at(i) : Diff(Diff::Equal); // dummy, ensure we process to the end // even when diffList doesn't end with equality @@ -1314,8 +1313,8 @@ QList<Diff> Differ::merge(const QList<Diff> &diffList) const int suffixCount = commonSuffix(lastDelete, lastInsert); if (suffixCount) { const QString suffix = lastDelete.right(suffixCount); - lastDelete = lastDelete.left(lastDelete.count() - suffixCount); - lastInsert = lastInsert.left(lastInsert.count() - suffixCount); + lastDelete = lastDelete.left(lastDelete.size() - suffixCount); + lastInsert = lastInsert.left(lastInsert.size() - suffixCount); diff.text.prepend(suffix); } @@ -1342,7 +1341,7 @@ QList<Diff> Differ::merge(const QList<Diff> &diffList) } QList<Diff> squashedDiffList = squashEqualities(newDiffList); - if (squashedDiffList.count() != newDiffList.count()) + if (squashedDiffList.size() != newDiffList.size()) return merge(squashedDiffList); return squashedDiffList; @@ -1363,8 +1362,8 @@ QList<Diff> Differ::cleanupSemantics(const QList<Diff> &diffList) int inserts = 0; // equality index, equality data QList<EqualityData> equalities; - for (int i = 0; i <= diffList.count(); i++) { - const Diff diff = i < diffList.count() + for (int i = 0; i <= diffList.size(); i++) { + const Diff diff = i < diffList.size() ? diffList.at(i) : Diff(Diff::Equal); // dummy, ensure we process to the end // even when diffList doesn't end with equality @@ -1374,10 +1373,10 @@ QList<Diff> Differ::cleanupSemantics(const QList<Diff> &diffList) previousData.deletesAfter = deletes; previousData.insertsAfter = inserts; } - if (i < diffList.count()) { // don't insert dummy + if (i < diffList.size()) { // don't insert dummy EqualityData data; data.equalityIndex = i; - data.textCount = diff.text.count(); + data.textCount = diff.text.size(); data.deletesBefore = deletes; data.insertsBefore = inserts; equalities.append(data); @@ -1386,15 +1385,15 @@ QList<Diff> Differ::cleanupSemantics(const QList<Diff> &diffList) } } else { if (diff.command == Diff::Delete) - deletes += diff.text.count(); + deletes += diff.text.size(); else if (diff.command == Diff::Insert) - inserts += diff.text.count(); + inserts += diff.text.size(); } } QMap<int, bool> equalitiesToBeSplit; int i = 0; - while (i < equalities.count()) { + while (i < equalities.size()) { const EqualityData &data = equalities.at(i); if (data.textCount <= qMax(data.deletesBefore, data.insertsBefore) && data.textCount <= qMax(data.deletesAfter, data.insertsAfter)) { @@ -1403,7 +1402,7 @@ QList<Diff> Differ::cleanupSemantics(const QList<Diff> &diffList) previousData.deletesAfter += data.textCount + data.deletesAfter; previousData.insertsAfter += data.textCount + data.insertsAfter; } - if (i < equalities.count() - 1) { + if (i < equalities.size() - 1) { EqualityData &nextData = equalities[i + 1]; nextData.deletesBefore += data.textCount + data.deletesBefore; nextData.insertsBefore += data.textCount + data.insertsBefore; @@ -1418,7 +1417,7 @@ QList<Diff> Differ::cleanupSemantics(const QList<Diff> &diffList) } QList<Diff> newDiffList; - for (int i = 0; i < diffList.count(); i++) { + for (int i = 0; i < diffList.size(); i++) { const Diff &diff = diffList.at(i); if (equalitiesToBeSplit.contains(i)) { newDiffList.append(Diff(Diff::Delete, diff.text)); @@ -1433,7 +1432,7 @@ QList<Diff> Differ::cleanupSemantics(const QList<Diff> &diffList) QList<Diff> Differ::cleanupSemanticsLossless(const QList<Diff> &diffList) { - if (diffList.count() < 3) // we need at least 3 items + if (diffList.size() < 3) // we need at least 3 items return diffList; QList<Diff> newDiffList; @@ -1441,7 +1440,7 @@ QList<Diff> Differ::cleanupSemanticsLossless(const QList<Diff> &diffList) Diff thisDiff = diffList.at(1); Diff nextDiff = diffList.at(2); int i = 2; - while (i < diffList.count()) { + while (i < diffList.size()) { if (prevDiff.command == Diff::Equal && nextDiff.command == Diff::Equal) { @@ -1453,9 +1452,9 @@ QList<Diff> Differ::cleanupSemanticsLossless(const QList<Diff> &diffList) // Shift the edit as far left as possible const int suffixCount = commonSuffix(equality1, edit); if (suffixCount) { - const QString commonString = edit.mid(edit.count() - suffixCount); - equality1 = equality1.left(equality1.count() - suffixCount); - edit = commonString + edit.left(edit.count() - suffixCount); + const QString commonString = edit.mid(edit.size() - suffixCount); + equality1 = equality1.left(equality1.size() - suffixCount); + edit = commonString + edit.left(edit.size() - suffixCount); equality2 = commonString + equality2; } @@ -1488,7 +1487,7 @@ QList<Diff> Differ::cleanupSemanticsLossless(const QList<Diff> &diffList) newDiffList.append(prevDiff); // append modified equality1 if (bestEquality2.isEmpty()) { i++; - if (i < diffList.count()) + if (i < diffList.size()) nextDiff = diffList.at(i); // omit equality2 } } else { @@ -1497,11 +1496,11 @@ QList<Diff> Differ::cleanupSemanticsLossless(const QList<Diff> &diffList) prevDiff = thisDiff; thisDiff = nextDiff; i++; - if (i < diffList.count()) + if (i < diffList.size()) nextDiff = diffList.at(i); } newDiffList.append(prevDiff); - if (i == diffList.count()) + if (i == diffList.size()) newDiffList.append(thisDiff); return newDiffList; } |