diff options
author | Anton Kudryavtsev <[email protected]> | 2023-08-25 16:49:09 +0300 |
---|---|---|
committer | Anton Kudryavtsev <[email protected]> | 2023-08-28 14:49:36 +0300 |
commit | 3730212312584e805927460d82bb9a0ef9c10f68 (patch) | |
tree | 76f02d25f1b777534ab0ccf6ec09d5d758c73a15 /src/network/access/qnetworkrequest.cpp | |
parent | 8db5896bbe9b7285abed2db681e80fd9110e2ba8 (diff) |
qnetworkrequest: port parseMatchImpl to QBAV
to save allocations, and use tokenize to avoid temp container
Change-Id: I2a43612b9d15538a93d4afd2c544714507141f0f
Reviewed-by: MÃ¥rten Nordheim <[email protected]>
Diffstat (limited to 'src/network/access/qnetworkrequest.cpp')
-rw-r--r-- | src/network/access/qnetworkrequest.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 8e666db2b0c..a7a5ca5e391 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -1220,31 +1220,29 @@ static QVariant parseETag(QByteArrayView raw) } template<typename T> -static QVariant parseMatchImpl(const QByteArray &raw, T op) +static QVariant parseMatchImpl(QByteArrayView raw, T op) { - const QByteArray trimmedRaw = raw.trimmed(); + const QByteArrayView trimmedRaw = raw.trimmed(); if (trimmedRaw == "*") return QStringList(QStringLiteral("*")); QStringList tags; - const QList<QByteArray> split = trimmedRaw.split(','); - for (const QByteArray &element : split) { - const QByteArray trimmed = element.trimmed(); - if (!op(trimmed)) - continue; - tags += QString::fromLatin1(trimmed); + for (auto &element : QLatin1StringView(trimmedRaw).tokenize(','_L1)) { + if (const auto trimmed = element.trimmed(); op(trimmed)) + tags += QString::fromLatin1(trimmed); } return tags; } -static QVariant parseIfMatch(const QByteArray &raw) + +static QVariant parseIfMatch(QByteArrayView raw) { return parseMatchImpl(raw, [](QByteArrayView element) { return element.startsWith('"') && element.endsWith('"'); }); } -static QVariant parseIfNoneMatch(const QByteArray &raw) +static QVariant parseIfNoneMatch(QByteArrayView raw) { return parseMatchImpl(raw, [](QByteArrayView element) { return (element.startsWith('"') || element.startsWith(R"(W/")")) && element.endsWith('"'); |