From ab651c22aef5cb777f5348fc02ee28ddaeef11e9 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Fri, 15 Sep 2023 12:20:33 +0300 Subject: [PATCH] QString::section: replace QList with QVLA to reduce allocations Change-Id: Ib996549a018b457d2ee4f073efb0d950268c7738 Reviewed-by: Thiago Macieira --- src/corelib/text/qstring.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index a56d2c064c..64ceb100ce 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -30,6 +30,7 @@ #endif #include +#include #include #include @@ -5045,7 +5046,7 @@ public: }; Q_DECLARE_TYPEINFO(qt_section_chunk, Q_RELOCATABLE_TYPE); -static QString extractSections(const QList §ions, qsizetype start, qsizetype end, +static QString extractSections(QSpan sections, qsizetype start, qsizetype end, QString::SectionFlags flags) { const qsizetype sectionsSize = sections.size(); @@ -5058,7 +5059,7 @@ static QString extractSections(const QList §ions, qsizetyp } else { qsizetype skip = 0; for (qsizetype k = 0; k < sectionsSize; ++k) { - const qt_section_chunk §ion = sections.at(k); + const qt_section_chunk §ion = sections[k]; if (section.length == section.string.size()) skip++; } @@ -5074,7 +5075,7 @@ static QString extractSections(const QList §ions, qsizetyp qsizetype x = 0; qsizetype first_i = start, last_i = end; for (qsizetype i = 0; x <= end && i < sectionsSize; ++i) { - const qt_section_chunk §ion = sections.at(i); + const qt_section_chunk §ion = sections[i]; const bool empty = (section.length == section.string.size()); if (x >= start) { if (x == start) @@ -5091,13 +5092,13 @@ static QString extractSections(const QList §ions, qsizetyp } if ((flags & QString::SectionIncludeLeadingSep) && first_i >= 0) { - const qt_section_chunk §ion = sections.at(first_i); + const qt_section_chunk §ion = sections[first_i]; ret.prepend(section.string.left(section.length)); } if ((flags & QString::SectionIncludeTrailingSep) && last_i < sectionsSize - 1) { - const qt_section_chunk §ion = sections.at(last_i+1); + const qt_section_chunk §ion = sections[last_i + 1]; ret += section.string.left(section.length); } @@ -5133,7 +5134,7 @@ QString QString::section(const QRegularExpression &re, qsizetype start, qsizetyp if (flags & SectionCaseInsensitiveSeps) sep.setPatternOptions(sep.patternOptions() | QRegularExpression::CaseInsensitiveOption); - QList sections; + QVarLengthArray sections; qsizetype n = size(), m = 0, last_m = 0, last_len = 0; QRegularExpressionMatchIterator iterator = sep.globalMatch(*this); while (iterator.hasNext()) {