QHttpNetworkHeaderPrivate: use erase and std::remove_if with QList

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

Change-Id: I9527923dcfc3201776a59de53dd5c03ca4d80063
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
Anton Kudryavtsev 2016-01-27 11:42:06 +03:00
parent 41e59ae0fa
commit 9ac8530591

View File

@ -39,6 +39,8 @@
#include "qhttpnetworkheader_p.h" #include "qhttpnetworkheader_p.h"
#include <algorithm>
#ifndef QT_NO_HTTP #ifndef QT_NO_HTTP
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@ -103,13 +105,12 @@ QList<QByteArray> QHttpNetworkHeaderPrivate::headerFieldValues(const QByteArray
void QHttpNetworkHeaderPrivate::setHeaderField(const QByteArray &name, const QByteArray &data) void QHttpNetworkHeaderPrivate::setHeaderField(const QByteArray &name, const QByteArray &data)
{ {
QList<QPair<QByteArray, QByteArray> >::Iterator it = fields.begin(); auto firstEqualsName = [&name](const QPair<QByteArray, QByteArray> &header) {
while (it != fields.end()) { return qstricmp(name.constData(), header.first) == 0;
if (qstricmp(name.constData(), it->first) == 0) };
it = fields.erase(it); fields.erase(std::remove_if(fields.begin(), fields.end(),
else firstEqualsName),
++it; fields.end());
}
fields.append(qMakePair(name, data)); fields.append(qMakePair(name, data));
} }