mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 769791 - Optimize adding ranges to the end of mRanges in nsSelection. r=smaug
This commit is contained in:
parent
a9e12e2b12
commit
e9a38eaecb
@ -3363,24 +3363,28 @@ Selection::FindInsertionPoint(
|
||||
*aPoint = 0;
|
||||
PRInt32 beginSearch = 0;
|
||||
PRInt32 endSearch = aElementArray->Length(); // one beyond what to check
|
||||
while (endSearch - beginSearch > 0) {
|
||||
PRInt32 center = (endSearch - beginSearch) / 2 + beginSearch;
|
||||
|
||||
nsRange* range = (*aElementArray)[center].mRange;
|
||||
if (endSearch) {
|
||||
PRInt32 center = endSearch - 1; // Check last index, then binary search
|
||||
do {
|
||||
nsRange* range = (*aElementArray)[center].mRange;
|
||||
|
||||
PRInt32 cmp;
|
||||
nsresult rv = aComparator(aPointNode, aPointOffset, range, &cmp);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
PRInt32 cmp;
|
||||
nsresult rv = aComparator(aPointNode, aPointOffset, range, &cmp);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (cmp < 0) { // point < cur
|
||||
endSearch = center;
|
||||
} else if (cmp > 0) { // point > cur
|
||||
beginSearch = center + 1;
|
||||
} else { // found match, done
|
||||
beginSearch = center;
|
||||
break;
|
||||
}
|
||||
if (cmp < 0) { // point < cur
|
||||
endSearch = center;
|
||||
} else if (cmp > 0) { // point > cur
|
||||
beginSearch = center + 1;
|
||||
} else { // found match, done
|
||||
beginSearch = center;
|
||||
break;
|
||||
}
|
||||
center = (endSearch - beginSearch) / 2 + beginSearch;
|
||||
} while (endSearch - beginSearch > 0);
|
||||
}
|
||||
|
||||
*aPoint = beginSearch;
|
||||
return NS_OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user