aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/textutils.cpp
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2023-10-12 10:05:38 +0200
committerDavid Schulz <[email protected]>2023-10-13 11:37:29 +0000
commit483a340e7347e99b69ba5b2e23c8059198d52b66 (patch)
treefdc012e1cac4b9c077d4f34aaff9d4ddb8961aef /src/libs/utils/textutils.cpp
parent0aded7311ab7a46e11c757e1dad39221c2f451fd (diff)
TextEditor: speed up searching in huge documents
Avoid creating QTextCursors for checking whether a search result is inside the find scope. QTextCursor::setPosition seems to layout the block the cursor is positioned at, which is not for free and not needed to verify whether a search result is inside the find scope. Change-Id: Ia1658fbbaa89a61f862e0b97eaa5b059972e2311 Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/libs/utils/textutils.cpp')
-rw-r--r--src/libs/utils/textutils.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/libs/utils/textutils.cpp b/src/libs/utils/textutils.cpp
index 252152415f8..f8ada6cca68 100644
--- a/src/libs/utils/textutils.cpp
+++ b/src/libs/utils/textutils.cpp
@@ -64,6 +64,16 @@ Position Position::fromCursor(const QTextCursor &c)
return c.isNull() ? Position{} : Position{c.blockNumber() + 1, c.positionInBlock()};
}
+int Position::toPositionInDocument(const QTextDocument *document) const
+{
+ QTC_ASSERT(document, return -1);
+ const QTextBlock block = document->findBlockByNumber(line - 1);
+ if (block.isValid())
+ return block.position() + qMin(column, block.length() - 1);
+
+ return -1;
+}
+
int Range::length(const QString &text) const
{
if (end.line < begin.line)