diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-05-08 12:14:09 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-15 11:39:11 +0200 |
commit | 65557f0c5a10321359c9875be9cdb45cf5a28934 (patch) | |
tree | e7c8e6c3646d041d424412b7daa64d95a87096e4 /src | |
parent | 32398200fbb5b7e9ad4a1d1bfcf51b9fbd34a758 (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.cpp | 32 |
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; } |