private void trFixdown(final int isa, final int isaD, final int isaN, final int sa, int i, final int size) { final int[] SA = this.SA; int j, k; int v; int c, d, e; for (v = SA[sa + i], c = trGetC(isa, isaD, isaN, v); (j = 2 * i + 1) < size; SA[sa + i] = SA[sa + k], i = k) { k = j++; d = trGetC(isa, isaD, isaN, SA[sa + k]); if (d < (e = trGetC(isa, isaD, isaN, SA[sa + j]))) { k = j; d = e; } if (d <= c) { break; } } SA[sa + i] = v; }
private void trInsertionSort(final int isa, final int isaD, final int isaN, int first, int last) { final int[] SA = this.SA; int a, b; int t, r; for (a = first + 1; a < last; ++a) { for (t = SA[a], b = a - 1; 0 > (r = trGetC(isa, isaD, isaN, t) - trGetC(isa, isaD, isaN, SA[b]));) { do { SA[b + 1] = SA[b]; } while (first <= --b && SA[b] < 0); if (b < first) { break; } } if (r == 0) { SA[b] = ~SA[b]; } SA[b + 1] = t; } }
private int trMedian3(final int isa, final int isaD, final int isaN, int v1, int v2, int v3) { final int[] SA = this.SA; int SA_v1 = trGetC(isa, isaD, isaN, SA[v1]); int SA_v2 = trGetC(isa, isaD, isaN, SA[v2]); int SA_v3 = trGetC(isa, isaD, isaN, SA[v3]); if (SA_v1 > SA_v2) { final int temp = v1; v1 = v2; v2 = temp; final int SA_vtemp = SA_v1; SA_v1 = SA_v2; SA_v2 = SA_vtemp; } if (SA_v2 > SA_v3) { if (SA_v1 > SA_v3) { return v1; } return v3; } return v2; }
private void trFixdown(final int isa, final int isaD, final int isaN, final int sa, int i, final int size) { final int[] SA = this.SA; int j, k; int v; int c, d, e; for (v = SA[sa + i], c = trGetC(isa, isaD, isaN, v); (j = 2 * i + 1) < size; SA[sa + i] = SA[sa + k], i = k) { k = j++; d = trGetC(isa, isaD, isaN, SA[sa + k]); if (d < (e = trGetC(isa, isaD, isaN, SA[sa + j]))) { k = j; d = e; } if (d <= c) { break; } } SA[sa + i] = v; }
private void trInsertionSort(final int isa, final int isaD, final int isaN, int first, int last) { final int[] SA = this.SA; int a, b; int t, r; for (a = first + 1; a < last; ++a) { for (t = SA[a], b = a - 1; 0 > (r = trGetC(isa, isaD, isaN, t) - trGetC(isa, isaD, isaN, SA[b]));) { do { SA[b + 1] = SA[b]; } while (first <= --b && SA[b] < 0); if (b < first) { break; } } if (r == 0) { SA[b] = ~SA[b]; } SA[b + 1] = t; } }
private int trMedian3(final int isa, final int isaD, final int isaN, int v1, int v2, int v3) { final int[] SA = this.SA; int SA_v1 = trGetC(isa, isaD, isaN, SA[v1]); int SA_v2 = trGetC(isa, isaD, isaN, SA[v2]); int SA_v3 = trGetC(isa, isaD, isaN, SA[v3]); if (SA_v1 > SA_v2) { final int temp = v1; v1 = v2; v2 = temp; final int SA_vtemp = SA_v1; SA_v1 = SA_v2; SA_v2 = SA_vtemp; } if (SA_v2 > SA_v3) { if (SA_v1 > SA_v3) { return v1; } return v3; } return v2; }
private int trMedian5(final int isa, final int isaD, final int isaN, int v1, int v2, int v3, int v4, int v5) { final int[] SA = this.SA; int SA_v1 = trGetC(isa, isaD, isaN, SA[v1]); int SA_v2 = trGetC(isa, isaD, isaN, SA[v2]); int SA_v3 = trGetC(isa, isaD, isaN, SA[v3]); int SA_v4 = trGetC(isa, isaD, isaN, SA[v4]); int SA_v5 = trGetC(isa, isaD, isaN, SA[v5]); int temp; int SA_vtemp;
private void trInsertionSort(final int isa, final int isaD, final int isaN, int first, int last) { final int[] SA = this.SA; int a, b; int t, r; for (a = first + 1; a < last; ++a) { for (t = SA[a], b = a - 1; 0 > (r = trGetC(isa, isaD, isaN, t) - trGetC(isa, isaD, isaN, SA[b]));) { do { SA[b + 1] = SA[b]; } while (first <= --b && SA[b] < 0); if (b < first) { break; } } if (r == 0) { SA[b] = ~SA[b]; } SA[b + 1] = t; } }
private void trFixdown(final int isa, final int isaD, final int isaN, final int sa, int i, final int size) { final int[] SA = this.SA; int j, k; int v; int c, d, e; for (v = SA[sa + i], c = trGetC(isa, isaD, isaN, v); (j = 2 * i + 1) < size; SA[sa + i] = SA[sa + k], i = k) { k = j++; d = trGetC(isa, isaD, isaN, SA[sa + k]); if (d < (e = trGetC(isa, isaD, isaN, SA[sa + j]))) { k = j; d = e; } if (d <= c) { break; } } SA[sa + i] = v; }
private int trMedian3(final int isa, final int isaD, final int isaN, int v1, int v2, int v3) { final int[] SA = this.SA; int SA_v1 = trGetC(isa, isaD, isaN, SA[v1]); int SA_v2 = trGetC(isa, isaD, isaN, SA[v2]); int SA_v3 = trGetC(isa, isaD, isaN, SA[v3]); if (SA_v1 > SA_v2) { final int temp = v1; v1 = v2; v2 = temp; final int SA_vtemp = SA_v1; SA_v1 = SA_v2; SA_v2 = SA_vtemp; } if (SA_v2 > SA_v3) { if (SA_v1 > SA_v3) { return v1; } return v3; } return v2; }
private int trMedian5(final int isa, final int isaD, final int isaN, int v1, int v2, int v3, int v4, int v5) { final int[] SA = this.SA; int SA_v1 = trGetC(isa, isaD, isaN, SA[v1]); int SA_v2 = trGetC(isa, isaD, isaN, SA[v2]); int SA_v3 = trGetC(isa, isaD, isaN, SA[v3]); int SA_v4 = trGetC(isa, isaD, isaN, SA[v4]); int SA_v5 = trGetC(isa, isaD, isaN, SA[v5]); int temp; int SA_vtemp;
while (b < last && (x = trGetC(isa, isaD, isaN, SA[b])) == v) { ++b; while (++b < last && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < c && (x = trGetC(isa, isaD, isaN, SA[c])) == v) { --c; while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d); while (++b < c && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d);
private void trHeapSort(final int isa, final int isaD, final int isaN, final int sa, final int size) { final int[] SA = this.SA; int i, m; int t; m = size; if (size % 2 == 0) { m--; if (trGetC(isa, isaD, isaN, SA[sa + m / 2]) < trGetC(isa, isaD, isaN, SA[sa + m])) { swapElements(SA, sa + m, SA, sa + m / 2); } } for (i = m / 2 - 1; 0 <= i; --i) { trFixdown(isa, isaD, isaN, sa, i, m); } if (size % 2 == 0) { swapElements(SA, sa, SA, sa + m); trFixdown(isa, isaD, isaN, sa, 0, m); } for (i = m - 1; 0 < i; --i) { t = SA[sa]; SA[sa] = SA[sa + i]; trFixdown(isa, isaD, isaN, sa, 0, i); SA[sa + i] = t; } }
while (b < last && (x = trGetC(isa, isaD, isaN, SA[b])) == v) { ++b; while (++b < last && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < c && (x = trGetC(isa, isaD, isaN, SA[c])) == v) { --c; while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d); while (++b < c && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d);
private void trHeapSort(final int isa, final int isaD, final int isaN, final int sa, final int size) { final int[] SA = this.SA; int i, m; int t; m = size; if (size % 2 == 0) { m--; if (trGetC(isa, isaD, isaN, SA[sa + m / 2]) < trGetC(isa, isaD, isaN, SA[sa + m])) { swapElements(SA, sa + m, SA, sa + m / 2); } } for (i = m / 2 - 1; 0 <= i; --i) { trFixdown(isa, isaD, isaN, sa, i, m); } if (size % 2 == 0) { swapElements(SA, sa, SA, sa + m); trFixdown(isa, isaD, isaN, sa, 0, m); } for (i = m - 1; 0 < i; --i) { t = SA[sa]; SA[sa] = SA[sa + i]; trFixdown(isa, isaD, isaN, sa, 0, i); SA[sa + i] = t; } }
trHeapSort(isa, isaD, isaN, first, last - first); for (a = last - 1; first < a; a = b) { for (x = trGetC(isa, isaD, isaN, SA[a]), b = a - 1; first <= b && trGetC(isa, isaD, isaN, SA[b]) == x; --b) { SA[b] = ~SA[b]; v = trGetC(isa, isaD, isaN, SA[first]); while (b < last && (x = trGetC(isa, isaD, isaN, SA[b])) == v) { ++b; while (++b < last && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < c && (x = trGetC(isa, isaD, isaN, SA[c])) == v) { --c; while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d); while (++b < c && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) {
while (b < last && (x = trGetC(isa, isaD, isaN, SA[b])) == v) { ++b; while (++b < last && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < c && (x = trGetC(isa, isaD, isaN, SA[c])) == v) { --c; while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d); while (++b < c && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d);
private void trHeapSort(final int isa, final int isaD, final int isaN, final int sa, final int size) { final int[] SA = this.SA; int i, m; int t; m = size; if (size % 2 == 0) { m--; if (trGetC(isa, isaD, isaN, SA[sa + m / 2]) < trGetC(isa, isaD, isaN, SA[sa + m])) { swapElements(SA, sa + m, SA, sa + m / 2); } } for (i = m / 2 - 1; 0 <= i; --i) { trFixdown(isa, isaD, isaN, sa, i, m); } if (size % 2 == 0) { swapElements(SA, sa, SA, sa + m); trFixdown(isa, isaD, isaN, sa, 0, m); } for (i = m - 1; 0 < i; --i) { t = SA[sa]; SA[sa] = SA[sa + i]; trFixdown(isa, isaD, isaN, sa, 0, i); SA[sa + i] = t; } }
trHeapSort(isa, isaD, isaN, first, last - first); for (a = last - 1; first < a; a = b) { for (x = trGetC(isa, isaD, isaN, SA[a]), b = a - 1; first <= b && trGetC(isa, isaD, isaN, SA[b]) == x; --b) { SA[b] = ~SA[b]; v = trGetC(isa, isaD, isaN, SA[first]); while (b < last && (x = trGetC(isa, isaD, isaN, SA[b])) == v) { ++b; while (++b < last && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < c && (x = trGetC(isa, isaD, isaN, SA[c])) == v) { --c; while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d); while (++b < c && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) {
for (x = trGetC(isa, isaD, isaN, SA[a]), b = a - 1; first <= b && trGetC(isa, isaD, isaN, SA[b]) == x; --b) { SA[b] = ~SA[b]; v = trGetC(isa, isaD, isaN, SA[first]); while (b < last && (x = trGetC(isa, isaD, isaN, SA[b])) == v) { ++b; while (++b < last && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < c && (x = trGetC(isa, isaD, isaN, SA[c])) == v) { --c; while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d); while (++b < c && (x = trGetC(isa, isaD, isaN, SA[b])) <= v) { if (x == v) { swapElements(SA, b, SA, a); while (b < --c && (x = trGetC(isa, isaD, isaN, SA[c])) >= v) { if (x == v) { swapElements(SA, c, SA, d);