litesoft
@ 939
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.commonfoundation.base; import org.litesoft.commonfoundation.annotations.*; @SuppressWarnings({"unchecked"}) public class Compare { /** * Compares pA object with the pB object for order. Nulls rise!<p> * * @return a negative integer, zero, or a positive integer as the pA object * is less than, equal to, or greater than the pB object. * * @throws ClassCastException if the specified object's type prevents it * from being compared to this Object. */ public static int nullsOK( @Nullable Comparable pThis, @Nullable Comparable pThem ) { return firstNullsOK( pThis, pThem ).result(); } /** * Compares pA object with the pB object for Ascending Order. Nulls rise!<p> * * @return a negative integer, zero, or a positive integer as the pA object * is less than, equal to, or greater than the pB object. * * @throws ClassCastException if the specified object's type prevents it * from being compared to this Object. */ public static int ascending( @Nullable Comparable pThis, @Nullable Comparable pThem ) { return firstNullsOK( pThis, pThem ).result(); } /** * Compares pA object with the pB object for Descending Order. Nulls sink!<p> * * @return a negative integer, zero, or a positive integer as the pA object * is greater than, equal to, or less than the pB object. * * @throws ClassCastException if the specified object's type prevents it * from being compared to this Object. */ public static int descending( @Nullable Comparable pThis, @Nullable Comparable pThem ) { return ascending( pThem, pThis ); // Note param flipped order! } public static boolean firstLessThanSecond( @NotNull Comparable pFirst, @NotNull Comparable pSecond ) { return pFirst.compareTo( pSecond ) < 0; } public static boolean firstGreaterThanSecond( @NotNull Comparable pFirst, @NotNull Comparable pSecond ) { return pFirst.compareTo( pSecond ) > 0; } public static Compare first( boolean pA, boolean pB ) { return ZERO.then( pA, pB ); } public static Compare first( int pA, int pB ) { return ZERO.then( pA, pB ); } public static Compare first( long pA, long pB ) { return ZERO.then( pA, pB ); } public static Compare first( @NotNull Comparable pA, @NotNull Comparable pB ) { return ZERO.then( pA, pB ); } /** * Nulls Rise */ public static Compare firstNullsOK( @Nullable Comparable pA, @Nullable Comparable pB ) { return ZERO.thenNullsOK( pA, pB ); } public Compare then( boolean pA, boolean pB ) { return this; } public Compare then( int pA, int pB ) { return this; } public Compare then( long pA, long pB ) { return this; } public Compare then( @NotNull Comparable pA, @NotNull Comparable pB ) { return this; } /** * Nulls Rise */ public Compare thenNullsOK( @Nullable Comparable pA, @Nullable Comparable pB ) { return this; } public final int result() { return mResult; } protected Compare( int pResult ) { mResult = pResult; } private int 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 ) { @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 ); } @Override public Compare then( long pA, long pB ) { return vector( pA - pB ); } @SuppressWarnings("ConstantConditions") @Override public Compare then( @NotNull Comparable pA, @NotNull Comparable pB ) { if ( (pA == null) || (pB == null) ) { throw new NullPointerException(); } return (pA == pB) ? this // same : vector( pA.compareTo( pB ) ); } @Override public Compare thenNullsOK( @Nullable Comparable pA, @Nullable Comparable pB ) { if ( pA == pB ) // same or both null { return this; } return (pA == null) ? NEGATIVE : (pB == null) ? POSITIVE : vector( pA.compareTo( pB ) ); } private Compare vector( long pCompareTo ) { return (pCompareTo == 0) ? this : (pCompareTo < 0) ? NEGATIVE : POSITIVE; } }; } |
Commits for litesoft/trunk/Java/core/Anywhere/src/org/litesoft/commonfoundation/base/Compare.java
Revision | Author | Commited | Message |
---|---|---|---|
939 Diff | GeorgeS | Mon 02 Jun, 2014 21:30:31 +0000 | Extracting commonfoundation |
805 Diff | GeorgeS | Wed 15 Aug, 2012 12:53:09 +0000 | |
804 Diff | GeorgeS | Wed 15 Aug, 2012 12:48:51 +0000 | |
151 Diff | GeorgeS | Thu 17 Mar, 2011 04:16:22 +0000 | |
50 Diff | GeorgeS | Tue 13 Apr, 2010 11:51:38 +0000 | |
49 Diff | GeorgeS | Mon 12 Apr, 2010 02:59:10 +0000 | License Text |
2 | GeorgeS | Sun 07 Feb, 2010 12:50:58 +0000 |