Fix SpannableStringBuilder getSpans sort
am: 051caedcaa
Change-Id: I6d4a4d3b5810d47809458bcd1e1dce9567363da6
This commit is contained in:
@@ -1025,16 +1025,19 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int i = size - 1; i > 0; i--) {
|
for (int i = size - 1; i > 0; i--) {
|
||||||
T v = array[0];
|
final T tmpSpan = array[0];
|
||||||
int prio = priority[0];
|
|
||||||
int insertOrder = insertionOrder[0];
|
|
||||||
array[0] = array[i];
|
array[0] = array[i];
|
||||||
|
array[i] = tmpSpan;
|
||||||
|
|
||||||
|
final int tmpPriority = priority[0];
|
||||||
priority[0] = priority[i];
|
priority[0] = priority[i];
|
||||||
|
priority[i] = tmpPriority;
|
||||||
|
|
||||||
|
final int tmpOrder = insertionOrder[0];
|
||||||
insertionOrder[0] = insertionOrder[i];
|
insertionOrder[0] = insertionOrder[i];
|
||||||
|
insertionOrder[i] = tmpOrder;
|
||||||
|
|
||||||
siftDown(0, array, i, priority, insertionOrder);
|
siftDown(0, array, i, priority, insertionOrder);
|
||||||
array[i] = v;
|
|
||||||
priority[i] = prio;
|
|
||||||
insertionOrder[i] = insertOrder;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1050,10 +1053,6 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
|
|||||||
*/
|
*/
|
||||||
private final <T> void siftDown(int index, T[] array, int size, int[] priority,
|
private final <T> void siftDown(int index, T[] array, int size, int[] priority,
|
||||||
int[] insertionOrder) {
|
int[] insertionOrder) {
|
||||||
T v = array[index];
|
|
||||||
int prio = priority[index];
|
|
||||||
int insertOrder = insertionOrder[index];
|
|
||||||
|
|
||||||
int left = 2 * index + 1;
|
int left = 2 * index + 1;
|
||||||
while (left < size) {
|
while (left < size) {
|
||||||
if (left < size - 1 && compareSpans(left, left + 1, priority, insertionOrder) < 0) {
|
if (left < size - 1 && compareSpans(left, left + 1, priority, insertionOrder) < 0) {
|
||||||
@@ -1062,15 +1061,22 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
|
|||||||
if (compareSpans(index, left, priority, insertionOrder) >= 0) {
|
if (compareSpans(index, left, priority, insertionOrder) >= 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final T tmpSpan = array[index];
|
||||||
array[index] = array[left];
|
array[index] = array[left];
|
||||||
|
array[left] = tmpSpan;
|
||||||
|
|
||||||
|
final int tmpPriority = priority[index];
|
||||||
priority[index] = priority[left];
|
priority[index] = priority[left];
|
||||||
|
priority[left] = tmpPriority;
|
||||||
|
|
||||||
|
final int tmpOrder = insertionOrder[index];
|
||||||
insertionOrder[index] = insertionOrder[left];
|
insertionOrder[index] = insertionOrder[left];
|
||||||
|
insertionOrder[left] = tmpOrder;
|
||||||
|
|
||||||
index = left;
|
index = left;
|
||||||
left = 2 * index + 1;
|
left = 2 * index + 1;
|
||||||
}
|
}
|
||||||
array[index] = v;
|
|
||||||
priority[index] = prio;
|
|
||||||
insertionOrder[index] = insertOrder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user