|
|
@ -244,15 +244,31 @@ public class kelondroBase64Order extends kelondroAbstractOrder implements kelond
|
|
|
|
if (keyCardinal > zeroCardinal) return keyCardinal - zeroCardinal;
|
|
|
|
if (keyCardinal > zeroCardinal) return keyCardinal - zeroCardinal;
|
|
|
|
return Long.MAX_VALUE - keyCardinal + zeroCardinal + 1;
|
|
|
|
return Long.MAX_VALUE - keyCardinal + zeroCardinal + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public int compare(byte[] a, byte[] b) {
|
|
|
|
public int compare(byte[] a, byte[] b) {
|
|
|
|
|
|
|
|
return (asc) ? compare0(a, b) : compare0(b, a);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public int compare0(byte[] a, byte[] b) {
|
|
|
|
|
|
|
|
if (zero == null) return compares(a, b);
|
|
|
|
|
|
|
|
// we have an artificial start point. check all combinations
|
|
|
|
|
|
|
|
int az = compares(a, zero); // -1 if a < z; 0 if a == z; 1 if a > z
|
|
|
|
|
|
|
|
int bz = compares(b, zero); // -1 if b < z; 0 if b == z; 1 if b > z
|
|
|
|
|
|
|
|
if ((az == 0) && (bz == 0)) return 0;
|
|
|
|
|
|
|
|
if (az == 0) return -1;
|
|
|
|
|
|
|
|
if (bz == 0) return 1;
|
|
|
|
|
|
|
|
if (az == bz) return compares(a, b);
|
|
|
|
|
|
|
|
return bz;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public int compares(byte[] a, byte[] b) {
|
|
|
|
int i = 0;
|
|
|
|
int i = 0;
|
|
|
|
final int al = a.length;
|
|
|
|
final int al = a.length;
|
|
|
|
final int bl = b.length;
|
|
|
|
final int bl = b.length;
|
|
|
|
final int len = (al > bl) ? bl : al;
|
|
|
|
final int len = (al > bl) ? bl : al;
|
|
|
|
while (i < len) {
|
|
|
|
while (i < len) {
|
|
|
|
if (ahpla[a[i]] > ahpla[b[i]]) return (asc) ? 1 : -1;
|
|
|
|
if (ahpla[a[i]] > ahpla[b[i]]) return 1;
|
|
|
|
if (ahpla[a[i]] < ahpla[b[i]]) return (asc) ? -1 : 1;
|
|
|
|
if (ahpla[a[i]] < ahpla[b[i]]) return -1;
|
|
|
|
// else the bytes are equal and it may go on yet undecided
|
|
|
|
// else the bytes are equal and it may go on yet undecided
|
|
|
|
i++;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -260,8 +276,8 @@ public class kelondroBase64Order extends kelondroAbstractOrder implements kelond
|
|
|
|
if ((i == al) && (i < bl) && (b[i] == 0)) return 0;
|
|
|
|
if ((i == al) && (i < bl) && (b[i] == 0)) return 0;
|
|
|
|
if ((i == bl) && (i < al) && (a[i] == 0)) return 0;
|
|
|
|
if ((i == bl) && (i < al) && (a[i] == 0)) return 0;
|
|
|
|
// no, decide by length
|
|
|
|
// no, decide by length
|
|
|
|
if (al > bl) return (asc) ? 1 : -1;
|
|
|
|
if (al > bl) return 1;
|
|
|
|
if (al < bl) return (asc) ? -1 : 1;
|
|
|
|
if (al < bl) return -1;
|
|
|
|
// no, they are equal
|
|
|
|
// no, they are equal
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|