diff options
author | nyamatongwe <unknown> | 2012-05-26 13:12:22 +1000 |
---|---|---|
committer | nyamatongwe <unknown> | 2012-05-26 13:12:22 +1000 |
commit | cb6005466e823389cdb026a3470588da0216cad2 (patch) | |
tree | 9ecd8ce67cbc5f3f2f7abc8d34853b5520e238dc /src | |
parent | 477a06c700990e4b646472ce1682a8e68a93383d (diff) | |
download | scintilla-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.cxx | 15 |
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; |