From 2c8302682ec45abf9688380021e915e216d9ae3d Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 5 Nov 2024 09:58:44 +0100 Subject: [PATCH] QString: make argToQStringImpl() SCARY Move the visitation of the QAnyStringView pattern from argToQString() to parseMultiArgFormatString(). The latter is the only part of the former that depends on the type (L1, U8, U16) of the pattern, the rest is independent. By retaining the QAnyStringView as a variant for longer, we share the post-processing steps previously duplicated for each view type. Amends a193d5c30347d4f9e2cb4caf2bded10f93a54406, but the duplication existed since 35431062bd7bf0d27b9bf785ab3cbc7fac5a69da (Qt 5). Task-number: QTBUG-124365 Change-Id: I8c346da45d72aeda92d18c6afa2236b62b842cc2 Reviewed-by: Thiago Macieira Reviewed-by: Ahmad Samir --- src/corelib/text/qstring.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index 03e6eb0593a..7d2d675f2ba 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -9209,7 +9209,7 @@ typedef QVarLengthArray ParseResult; typedef QVarLengthArray ArgIndexToPlaceholderMap; template -static ParseResult parseMultiArgFormatString(StringView s) +static ParseResult parseMultiArgFormatString_impl(StringView s) { ParseResult result; @@ -9240,6 +9240,11 @@ static ParseResult parseMultiArgFormatString(StringView s) return result; } +static ParseResult parseMultiArgFormatString(QAnyStringView s) +{ + return s.visit([] (auto s) { return parseMultiArgFormatString_impl(s); }); +} + static ArgIndexToPlaceholderMap makeArgIndexToPlaceholderMap(const ParseResult &parts) { ArgIndexToPlaceholderMap result; @@ -9285,8 +9290,7 @@ static qsizetype resolveStringRefsAndReturnTotalSize(ParseResult &parts, const A } // unnamed namespace -template -static QString argToQStringImpl(StringView pattern, size_t numArgs, const QtPrivate::ArgBase **args) +QString QtPrivate::argToQString(QAnyStringView pattern, size_t numArgs, const ArgBase **args) { // Step 1-2 above ParseResult parts = parseMultiArgFormatString(pattern); @@ -9338,13 +9342,6 @@ static QString argToQStringImpl(StringView pattern, size_t numArgs, const QtPriv return result; } -QString QtPrivate::argToQString(QAnyStringView pattern, size_t n, const ArgBase **args) -{ - return pattern.visit([n, args](auto pattern) { - return argToQStringImpl(pattern, n, args); - }); -} - /*! \fn bool QString::isRightToLeft() const Returns \c true if the string is read right to left.