From b1089787d1dd9dd2b6b09a74923ea5f573d04bb2 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 26 Dec 2019 19:32:00 +0100 Subject: QMimeData: Extract Method QMimeDataPrivate::find() Centralize the search for the QMimeDataStruct with a given format in find() (overloaded on const and non-const, but implemented only once), and use it in the three other functions that performed lookup before. In setData(), optimize the case where data is overwritten. Use a std::vector to not have to think about hidden detaches when implementing the const find() in terms of the non-const one. Change-Id: I874e5c6ef9c97d98b42f29faccbc3043e8c6a855 Reviewed-by: David Faure --- src/corelib/kernel/qmimedata.cpp | 53 +++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 25 deletions(-) (limited to 'src/corelib/kernel/qmimedata.cpp') diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp index fca258c9e3..c38dab3e3f 100644 --- a/src/corelib/kernel/qmimedata.cpp +++ b/src/corelib/kernel/qmimedata.cpp @@ -72,40 +72,44 @@ public: QVariant retrieveTypedData(const QString &format, QMetaType::Type type) const; - QVector dataList; + std::vector::iterator find(const QString &format) noexcept { + const auto formatEquals = [](const QString &format) { + return [&format](const QMimeDataStruct &s) { return s.format == format; }; + }; + return std::find_if(dataList.begin(), dataList.end(), formatEquals(format)); + } + + std::vector::const_iterator find(const QString &format) const noexcept { + return const_cast(this)->find(format); + } + + std::vector dataList; }; void QMimeDataPrivate::removeData(const QString &format) { - for (int i=0; idata = data; } QVariant QMimeDataPrivate::getData(const QString &format) const { - QVariant data; - for (int i=0; idata; } QVariant QMimeDataPrivate::retrieveTypedData(const QString &format, QMetaType::Type type) const @@ -635,10 +639,9 @@ QStringList QMimeData::formats() const { Q_D(const QMimeData); QStringList list; - const int size = d->dataList.size(); - list.reserve(size); - for (int i = 0; i < size; ++i) - list += d->dataList.at(i).format; + list.reserve(static_cast(d->dataList.size())); + for (auto &e : d->dataList) + list += e.format; return list; } -- cgit v1.2.3