diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2020-05-10 08:51:09 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2020-05-11 07:01:34 +0200 |
commit | 0c17dca4f096d66b96601a3d127483b7ee4b7ac2 (patch) | |
tree | 0fe5217ede450a73ecdb14bd6daba3d2faa88ee4 /src/corelib/serialization/qxmlstream.cpp | |
parent | 2e298c5f82c1256e35122205a4bb3093c46a4cb3 (diff) |
QXmlStream: use even more ranged for loops
Write a small range adapter that maps begin() to rbegin() and end() to
rend() of the underlying range, use it to replace indexed reverse
loops with ranged for ones.
Change-Id: I5498a23106b0432ce885e72e5e3912910f50b5c1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/serialization/qxmlstream.cpp')
-rw-r--r-- | src/corelib/serialization/qxmlstream.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp index 8cd383e702..a469f0aa5b 100644 --- a/src/corelib/serialization/qxmlstream.cpp +++ b/src/corelib/serialization/qxmlstream.cpp @@ -71,12 +71,31 @@ private: #endif #include <private/qmemory_p.h> +#include <iterator> + QT_BEGIN_NAMESPACE #include "qxmlstream_p.h" enum { StreamEOF = ~0U }; +namespace { +template <typename Range> +auto reversed(Range &r) +{ + struct R { + Range *r; + auto begin() { return std::make_reverse_iterator(std::end(*r)); } + auto end() { return std::make_reverse_iterator(std::begin(*r)); } + }; + + return R{&r}; +} + +template <typename Range> +void reversed(const Range &&) = delete; +} + /*! \enum QXmlStreamReader::TokenType @@ -1562,8 +1581,7 @@ uint QXmlStreamReaderPrivate::getChar_helper() QStringRef QXmlStreamReaderPrivate::namespaceForPrefix(const QStringRef &prefix) { - for (int j = namespaceDeclarations.size() - 1; j >= 0; --j) { - const NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(j); + for (const NamespaceDeclaration &namespaceDeclaration : reversed(namespaceDeclarations)) { if (namespaceDeclaration.prefix == prefix) { return namespaceDeclaration.namespaceUri; } @@ -3240,8 +3258,7 @@ bool QXmlStreamWriterPrivate::finishStartElement(bool contents) QXmlStreamPrivateTagStack::NamespaceDeclaration &QXmlStreamWriterPrivate::findNamespace(const QString &namespaceUri, bool writeDeclaration, bool noDefault) { - for (int j = namespaceDeclarations.size() - 1; j >= 0; --j) { - NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations[j]; + for (NamespaceDeclaration &namespaceDeclaration : reversed(namespaceDeclarations)) { if (namespaceDeclaration.namespaceUri == namespaceUri) { if (!noDefault || !namespaceDeclaration.prefix.isEmpty()) return namespaceDeclaration; |