From 756766eaa0040f734d79ba914d967356f8d48057 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 14 Apr 2025 09:25:12 -0700 Subject: [PATCH] QUrl: use universal/forwarding references for QUrlPrivate::setXxx This avoids an extra copy of the QString provided by the user in the public API. Amends commit 31207b539a19182b48c4b3b8413190d505633eea, which said it wanted to "copy the input QString if it is a QString", but we only want to copy once (onto the QUrlPrivate). Change-Id: Id77d3646196e52202f07fffd964bca4683d83769 Reviewed-by: Timur Pocheptsov --- src/corelib/io/qurl.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 1bf6c499b53..cd8e4425bf6 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -528,13 +528,13 @@ public: // the "end" parameters are like STL iterators: they point to one past the last valid element bool setScheme(const QString &value, qsizetype len, bool doSetError); void setAuthority(const QString &auth, qsizetype from, qsizetype end, QUrl::ParsingMode mode); - template void setUserInfo(String value, QUrl::ParsingMode mode); - template void setUserName(String value, QUrl::ParsingMode mode); - template void setPassword(String value, QUrl::ParsingMode mode); + template void setUserInfo(String &&value, QUrl::ParsingMode mode); + template void setUserName(String &&value, QUrl::ParsingMode mode); + template void setPassword(String &&value, QUrl::ParsingMode mode); bool setHost(const QString &value, qsizetype from, qsizetype end, QUrl::ParsingMode mode); - template void setPath(String value, QUrl::ParsingMode mode); - template void setQuery(String value, QUrl::ParsingMode mode); - template void setFragment(String value, QUrl::ParsingMode mode); + template void setPath(String &&value, QUrl::ParsingMode mode); + template void setQuery(String &&value, QUrl::ParsingMode mode); + template void setFragment(String &&value, QUrl::ParsingMode mode); inline bool hasScheme() const { return sectionIsPresent & Scheme; } inline bool hasAuthority() const { return sectionIsPresent & Authority; } @@ -1098,7 +1098,7 @@ inline void QUrlPrivate::setAuthority(const QString &auth, qsizetype from, qsize port = -1; } -template void QUrlPrivate::setUserInfo(String value, QUrl::ParsingMode mode) +template void QUrlPrivate::setUserInfo(String &&value, QUrl::ParsingMode mode) { Q_ASSERT_X(mode != QUrl::DecodedMode, "setUserInfo", "This function should only be called when parsing encoded components"); @@ -1114,31 +1114,31 @@ template void QUrlPrivate::setUserInfo(String value, QUrl::Par } } -template inline void QUrlPrivate::setUserName(String value, QUrl::ParsingMode mode) +template inline void QUrlPrivate::setUserName(String &&value, QUrl::ParsingMode mode) { sectionIsPresent |= UserName; recodeFromUser(userName, value, userNameInIsolation, mode); } -template inline void QUrlPrivate::setPassword(String value, QUrl::ParsingMode mode) +template inline void QUrlPrivate::setPassword(String &&value, QUrl::ParsingMode mode) { sectionIsPresent |= Password; recodeFromUser(password, value, passwordInIsolation, mode); } -template inline void QUrlPrivate::setPath(String value, QUrl::ParsingMode mode) +template inline void QUrlPrivate::setPath(String &&value, QUrl::ParsingMode mode) { // sectionIsPresent |= Path; // not used, save some cycles recodeFromUser(path, value, pathInIsolation, mode); } -template inline void QUrlPrivate::setFragment(String value, QUrl::ParsingMode mode) +template inline void QUrlPrivate::setFragment(String &&value, QUrl::ParsingMode mode) { sectionIsPresent |= Fragment; recodeFromUser(fragment, value, fragmentInIsolation, mode); } -template inline void QUrlPrivate::setQuery(String value, QUrl::ParsingMode mode) +template inline void QUrlPrivate::setQuery(String &&value, QUrl::ParsingMode mode) { sectionIsPresent |= Query; recodeFromUser(query, value, queryInIsolation, mode);