diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2015-06-16 16:48:27 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2016-01-26 11:21:37 +0000 |
commit | cf9d112d7a99502b7f68c3bce5fe5e2a6d123917 (patch) | |
tree | 3b3322ee188f000312e1f7d3e296fdd5d1325e5a /src/tools/qlalr/lalr.cpp | |
parent | 18597b2ae2a757de932dbc8314899d5a1d27304e (diff) |
qlalr: remove uses of inefficient QLists
For QList<QLinkedList<T>::iterator>, mark the iterator Q_PRIMITIVE_TYPE.
This should be done in Qt itself, but would be binary incompatible.
For two other types that are used as values in QMultiMap, replaced
foreach (x, map.values(y))
with
auto range = map.equal_range(y);
for (auto it = range.first; it != ramge.second; ++it)
x = *it;
which doesn't require a temporary QList.
Change-Id: I9ddd15dd9b1d5bb3000833d14ed911451a272328
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Diffstat (limited to 'src/tools/qlalr/lalr.cpp')
-rw-r--r-- | src/tools/qlalr/lalr.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/tools/qlalr/lalr.cpp b/src/tools/qlalr/lalr.cpp index 27974da0a8..5b88456ce9 100644 --- a/src/tools/qlalr/lalr.cpp +++ b/src/tools/qlalr/lalr.cpp @@ -362,8 +362,10 @@ void Automaton::closure (StatePointer state) if (_M_grammar->isNonTerminal (*item->dot)) { - foreach (const RulePointer &rule, _M_grammar->rule_map.values (*item->dot)) + const auto range = qAsConst(_M_grammar->rule_map).equal_range(*item->dot); + for (auto it = range.first; it != range.second; ++it) { + const RulePointer &rule = *it; Item ii; ii.rule = rule; ii.dot = rule->rhs.begin (); @@ -701,8 +703,10 @@ void Automaton::buildLookaheads () { for (ItemPointer item = p->closure.begin (); item != p->closure.end (); ++item) { - foreach (const Lookback &lookback, lookbacks.values (item)) + const auto range = qAsConst(lookbacks).equal_range(item); + for (auto it = range.first; it != range.second; ++it) { + const Lookback &lookback = *it; StatePointer q = lookback.state; #ifndef QLALR_NO_DEBUG_LOOKAHEADS |