litesoft
@ 804
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.core.typeutils; @SuppressWarnings({"unchecked"}) public class Compare { private int mResult; protected Compare( int pResult ) { mResult = pResult; } public final int result() { return mResult; } private static final Compare NEGATIVE = new Compare( -1 ); private static final Compare POSITIVE = new Compare( 1 ); private static final Compare ZERO = new Compare( 0 ) { private Compare vector( int pCompareTo ) { return (pCompareTo == 0) ? this : (pCompareTo < 0) ? NEGATIVE : POSITIVE; } @Override public Compare then( Comparable pA, Comparable pB ) { if ( pA == pB ) // same or both null { return this; } // noinspection unchecked return vector( (pA != null) ? pA.compareTo( pB ) : -(pB.compareTo( pA )) ); } @Override public Compare thenNullsOK( Comparable pA, Comparable pB ) { if ( pA == pB ) // same or both null { return this; } return (pA == null) ? NEGATIVE : (pB == null) ? POSITIVE : vector( pA.compareTo( pB ) ); } @Override public Compare then( boolean pA, boolean pB ) { return (pA == pB) ? this : then( (pA ? 1 : 0), (pB ? 1 : 0) ); } @Override public Compare then( int pA, int pB ) { return vector( pA - pB ); } }; public static Compare first( Comparable pA, Comparable pB ) { return ZERO.then( pA, pB ); } public Compare then( Comparable pA, Comparable pB ) { return this; } /** * Nulls Rise */ public static Compare firstNullsOK( Comparable pA, Comparable pB ) { return ZERO.thenNullsOK( pA, pB ); } /** * Nulls Rise */ public Compare thenNullsOK( Comparable pA, Comparable pB ) { return this; } public static Compare first( boolean pA, boolean pB ) { return ZERO.then( pA, pB ); } public Compare then( boolean pA, boolean pB ) { return this; } public static Compare first( int pA, int pB ) { return ZERO.then( pA, pB ); } public Compare then( int pA, int pB ) { return this; } } |