Bug 769791 - Optimize adding ranges to the end of mRanges in nsSelection. r=smaug

This commit is contained in:
Adam Dane [:hobophobe] 2012-07-24 15:25:36 -05:00
parent a9e12e2b12
commit e9a38eaecb

View File

@ -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;
}