aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authornyamatongwe <unknown>2012-05-26 13:12:22 +1000
committernyamatongwe <unknown>2012-05-26 13:12:22 +1000
commitcb6005466e823389cdb026a3470588da0216cad2 (patch)
tree9ecd8ce67cbc5f3f2f7abc8d34853b5520e238dc /src
parent477a06c700990e4b646472ce1682a8e68a93383d (diff)
downloadscintilla-mirror-cb6005466e823389cdb026a3470588da0216cad2.tar.gz
Optimize case-sensitive searching by hoisting the first character of search
string into a separate variable.
Diffstat (limited to 'src')
-rw-r--r--src/Document.cxx15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index d427d636d..dca0ccc51 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -1461,13 +1461,16 @@ long Document::FindText(int minPos, int maxPos, const char *search,
}
if (caseSensitive) {
const int endSearch = (startPos <= endPos) ? endPos - lengthFind + 1 : endPos;
+ const char charStartSearch = search[0];
while (forward ? (pos < endSearch) : (pos >= endSearch)) {
- bool found = (pos + lengthFind) <= limitPos;
- for (int indexSearch = 0; (indexSearch < lengthFind) && found; indexSearch++) {
- found = CharAt(pos + indexSearch) == search[indexSearch];
- }
- if (found && MatchesWordOptions(word, wordStart, pos, lengthFind)) {
- return pos;
+ if (CharAt(pos) == charStartSearch) {
+ bool found = (pos + lengthFind) <= limitPos;
+ for (int indexSearch = 1; (indexSearch < lengthFind) && found; indexSearch++) {
+ found = CharAt(pos + indexSearch) == search[indexSearch];
+ }
+ if (found && MatchesWordOptions(word, wordStart, pos, lengthFind)) {
+ return pos;
+ }
}
if (!NextCharacter(pos, increment))
break;