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 <thiago.macieira@intel.com>
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
This commit is contained in:
Marc Mutz 2024-11-05 09:58:44 +01:00
parent cc24213bdb
commit 2c8302682e

View File

@ -9209,7 +9209,7 @@ typedef QVarLengthArray<Part, ExpectedParts> ParseResult;
typedef QVarLengthArray<int, ExpectedParts/2> ArgIndexToPlaceholderMap;
template <typename StringView>
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 <typename StringView>
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.