QNetworkHeadersPrivate: use erase and std::remove_if with QList

... instead of using erase in a loop, with quadratic complexity.

Change-Id: I91053ddb58639615e8864e5be20861e7cceb815e
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
Anton Kudryavtsev 2016-01-28 16:58:24 +03:00
parent 49388f3dfd
commit f416561702

View File

@ -51,6 +51,8 @@
# include <stdio.h> # include <stdio.h>
#endif #endif
#include <algorithm>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
/*! /*!
@ -991,13 +993,12 @@ void QNetworkHeadersPrivate::setCookedHeader(QNetworkRequest::KnownHeaders heade
void QNetworkHeadersPrivate::setRawHeaderInternal(const QByteArray &key, const QByteArray &value) void QNetworkHeadersPrivate::setRawHeaderInternal(const QByteArray &key, const QByteArray &value)
{ {
RawHeadersList::Iterator it = rawHeaders.begin(); auto firstEqualsKey = [&key](const RawHeaderPair &header) {
while (it != rawHeaders.end()) { return qstricmp(header.first.constData(), key.constData()) == 0;
if (qstricmp(it->first.constData(), key.constData()) == 0) };
it = rawHeaders.erase(it); rawHeaders.erase(std::remove_if(rawHeaders.begin(), rawHeaders.end(),
else firstEqualsKey),
++it; rawHeaders.end());
}
if (value.isNull()) if (value.isNull())
return; // only wanted to erase key return; // only wanted to erase key