aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-05-08 12:14:09 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-15 11:39:11 +0200
commit65557f0c5a10321359c9875be9cdb45cf5a28934 (patch)
treee7c8e6c3646d041d424412b7daa64d95a87096e4 /src
parent32398200fbb5b7e9ad4a1d1bfcf51b9fbd34a758 (diff)
V4 IR: change BasicBlockSet::const_iterator to use std::find.
When the storage in the BasicBlockSet is a std::vector<bool>, the begin() iterator and the ++operator now use std::find. Good STL implementations have an optimized version specifically for std::vector<bool> that is a lot faster than the iterating that was used before. The change also makes the code more readable. Change-Id: Ic37bac694c133c597b3d61a91b04a0b758516dc3 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/compiler/qv4ssa.cpp32
1 files changed, 12 insertions, 20 deletions
diff --git a/src/qml/compiler/qv4ssa.cpp b/src/qml/compiler/qv4ssa.cpp
index 84232a9ebb..97114b9507 100644
--- a/src/qml/compiler/qv4ssa.cpp
+++ b/src/qml/compiler/qv4ssa.cpp
@@ -243,18 +243,13 @@ public:
else
flagIt = set.blockFlags->size();
} else {
- if (set.blockNumbers) {
+ if (set.blockNumbers)
numberIt = set.blockNumbers->begin();
- } else {
- flagIt = 0;
- size_t eIt = set.blockFlags->size();
- while (flagIt != eIt) {
- if (set.blockFlags->operator[](flagIt))
- break;
- else
- ++flagIt;
- }
- }
+ else
+ flagIt = std::distance(set.blockFlags->begin(),
+ std::find(set.blockFlags->begin(),
+ set.blockFlags->end(),
+ true));
}
}
@@ -284,16 +279,13 @@ public:
const_iterator &operator++()
{
- if (set.blockNumbers) {
+ if (set.blockNumbers)
++numberIt;
- } else {
- size_t eIt = set.blockFlags->size();
- while (flagIt != eIt) {
- ++flagIt;
- if (flagIt == eIt || set.blockFlags->operator[](flagIt))
- break;
- }
- }
+ else
+ flagIt = std::distance(set.blockFlags->begin(),
+ std::find(set.blockFlags->begin() + flagIt + 1,
+ set.blockFlags->end(),
+ true));
return *this;
}