summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-04-21 12:33:24 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-04-21 12:33:24 (GMT)
commit922090951809a2523223c6dcdac46f661a914b3d (patch)
tree904c7dc90d0347e4bc4276f2d0a9b27adbef5156
parenta334ad303d2763cd53fc5bd62945d08d3555b8a7 (diff)
parent83b7f27082841aae59b9236d6f6b3f255c9d94b1 (diff)
downloadQt-922090951809a2523223c6dcdac46f661a914b3d.zip
Qt-922090951809a2523223c6dcdac46f661a914b3d.tar.gz
Qt-922090951809a2523223c6dcdac46f661a914b3d.tar.bz2
Merge branch 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into master-integration
* 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-1: Use binary search to speed up findChildFrame()
-rw-r--r--src/gui/text/qtextdocument_p.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp
index 2172f74..a997720 100644
--- a/src/gui/text/qtextdocument_p.cpp
+++ b/src/gui/text/qtextdocument_p.cpp
@@ -1406,11 +1406,18 @@ void QTextDocumentPrivate::changeObjectFormat(QTextObject *obj, int format)
static QTextFrame *findChildFrame(QTextFrame *f, int pos)
{
- // ##### use binary search
- QList<QTextFrame *> children = f->childFrames();
- for (int i = 0; i < children.size(); ++i) {
- QTextFrame *c = children.at(i);
- if (pos >= c->firstPosition() && pos <= c->lastPosition())
+ /* Binary search for frame at pos */
+ const QList<QTextFrame *> children = f->childFrames();
+ int first = 0;
+ int last = children.size() - 1;
+ while (first <= last) {
+ int mid = (first + last) / 2;
+ QTextFrame *c = children.at(mid);
+ if (pos > c->lastPosition())
+ first = mid + 1;
+ else if (pos < c->firstPosition())
+ last = mid - 1;
+ else
return c;
}
return 0;