From b1b57225dbc8733935697e1895631969e9a95376 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 4 Sep 2016 16:55:29 +0200 Subject: Eradicate Java-style loops (II): QSetIterator -> C++11 ranged for Java-style iterators are slower than STL-style ones, so they should not be used in library code. Replaced them with C++11 ranged for loops, adding qAsConst() as needed. Change-Id: I21b59daceafc62b94ebba56bfef1f050988b9c9f Reviewed-by: Friedemann Kleint --- src/xmlpatterns/schema/qxsdschemachecker.cpp | 5 ++--- src/xmlpatterns/schema/qxsdstatemachine_p.h | 4 +--- src/xmlpatterns/schema/qxsdstatemachine_tpl_p.h | 12 +++-------- .../schema/qxsdvalidatinginstancereader.cpp | 25 ++++++---------------- 4 files changed, 12 insertions(+), 34 deletions(-) diff --git a/src/xmlpatterns/schema/qxsdschemachecker.cpp b/src/xmlpatterns/schema/qxsdschemachecker.cpp index b6e51f3..0898848 100644 --- a/src/xmlpatterns/schema/qxsdschemachecker.cpp +++ b/src/xmlpatterns/schema/qxsdschemachecker.cpp @@ -1694,9 +1694,8 @@ void XsdSchemaChecker::checkDuplicatedAttributeUses() void XsdSchemaChecker::checkElementConstraints() { const QSet elements = collectAllElements(m_schema); - QSetIterator it(elements); - while (it.hasNext()) { - const XsdElement::Ptr element = it.next(); + + for (const XsdElement::Ptr &element : elements) { // @see http://www.w3.org/TR/xmlschema11-1/#e-props-correct diff --git a/src/xmlpatterns/schema/qxsdstatemachine_p.h b/src/xmlpatterns/schema/qxsdstatemachine_p.h index 0ec8eb4..e535c8b 100644 --- a/src/xmlpatterns/schema/qxsdstatemachine_p.h +++ b/src/xmlpatterns/schema/qxsdstatemachine_p.h @@ -261,9 +261,7 @@ namespace QPatternist { QSet result; - QSetIterator it(states); - while (it.hasNext()) { // iterate over all given states - const StateId state = it.next(); + for (const StateId state : states) { // get the transition table for the current state const QHash > transitions = m_transitions.value(state); diff --git a/src/xmlpatterns/schema/qxsdstatemachine_tpl_p.h b/src/xmlpatterns/schema/qxsdstatemachine_tpl_p.h index 91424a8..b989584 100644 --- a/src/xmlpatterns/schema/qxsdstatemachine_tpl_p.h +++ b/src/xmlpatterns/schema/qxsdstatemachine_tpl_p.h @@ -320,11 +320,9 @@ typename XsdStateMachine::StateId XsdStateMachine it(nfaState); bool hasStartState = false; bool hasEndState = false; - while (it.hasNext()) { - const StateId state = it.next(); + for (const StateId state : qAsConst(nfaState)) { if (m_states.value(state) == EndState) { hasEndState = true; } else if (m_states.value(state) == StartState) { @@ -390,12 +388,8 @@ XsdStateMachine XsdStateMachine::toDFA() const // the 'states' set QList input; - { - QSetIterator it(states); - while (it.hasNext()) { - input << m_transitions.value(it.next()).keys(); - } - } + for (const StateId state : states) + input << m_transitions.value(state).keys(); // get the state in DFA that corresponds to the 'states' set in the NFA const StateId dfaBegin = dfaStateForNfaState(states, table, dfa); diff --git a/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp index 7cb925a..bf33af1 100644 --- a/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp +++ b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp @@ -167,9 +167,7 @@ bool XsdValidatingInstanceReader::read() // check IDREF occurrences const QStringList ids = m_model->idIdRefBindingIds(); - QSetIterator it(m_idRefs); - while (it.hasNext()) { - const QString id = it.next(); + for (const QString &id : qAsConst(m_idRefs)) { if (!ids.contains(id)) { error(QtXmlPatterns::tr("There is one IDREF value with no corresponding ID: %1.").arg(formatKeyword(id))); return false; @@ -750,9 +748,7 @@ bool XsdValidatingInstanceReader::validateElementComplexType(const XsdElement::P bool hasIDAttribute = hasIDAttributeUse(complexType->attributeUses()); // 2 - QSetIterator it(attributes); - while (it.hasNext()) { - const QXmlName attributeName = it.next(); + for (const QXmlName &attributeName : attributes) { // skip builtin attributes if (attributeName == m_xsiNilName || @@ -1005,9 +1001,7 @@ bool XsdValidatingInstanceReader::validateKeyIdentityConstraint(const XsdElement return false; // 4.2.3 - QSetIterator it(qualifiedNodeSet); - while (it.hasNext()) { - const TargetNode node = it.next(); + for (const TargetNode node : qualifiedNodeSet) { const QVector fieldItems = node.fieldItems(); for (int i = 0; i < fieldItems.count(); ++i) { const QXmlNodeModelIndex index = fieldItems.at(i).toNodeModelIndex(); @@ -1037,16 +1031,11 @@ bool XsdValidatingInstanceReader::validateKeyRefIdentityConstraint(const XsdElem const TargetNode::Set keySet = m_idcKeys.value(constraint->referencedKey()->name(m_namePool)); - QSetIterator it(qualifiedNodeSet); - while (it.hasNext()) { - const TargetNode node = it.next(); + for (const TargetNode &node : qualifiedNodeSet) { bool foundMatching = false; - QSetIterator keyIt(keySet); - while (keyIt.hasNext()) { - const TargetNode keyNode = keyIt.next(); - + for (const TargetNode &keyNode : keySet) { if (node.fieldsAreEqual(keyNode, m_namePool, m_context, &reflection)) { foundMatching = true; break; @@ -1179,9 +1168,7 @@ bool XsdValidatingInstanceReader::selectNodeSets(const XsdElement::Ptr&, const Q } // copy all items from target node set to qualified node set, that have no empty fields - QSetIterator it(targetNodeSet); - while (it.hasNext()) { - const TargetNode node = it.next(); + for (const TargetNode &node : qAsConst(targetNodeSet)) { if (node.emptyFieldsCount() == 0) qualifiedNodeSet.insert(node); } -- cgit v1.2.1