package hirondelle.stocks.util;
public final class HashCodeUtil {
public static final int SEED = 23;
public static int hash(int aSeed, boolean aBoolean) {
return firstTerm( aSeed ) + ( aBoolean ? 1 : 0 );
}
public static int hash(int aSeed, char aChar) {
return firstTerm( aSeed ) + (int)aChar;
}
public static int hash(int aSeed , int aInt) {
return firstTerm( aSeed ) + aInt;
}
public static int hash(int aSeed , long aLong) {
return firstTerm(aSeed) + (int)( aLong ^ (aLong >>> 32) );
}
public static int hash(int aSeed , float aFloat) {
return hash( aSeed, Float.floatToIntBits(aFloat) );
}
public static int hash(int aSeed , double aDouble) {
return hash( aSeed, Double.doubleToLongBits(aDouble) );
}
public static int hash(int aSeed , Object aObject) {
return hash( aSeed, (aObject == null ? 0 : aObject.hashCode()) );
}
public static int hash(int aSeed , Object[] aArray) {
int result = aSeed;
for (int idx = 0; idx < aArray.length; ++idx) {
result = hash( result, aArray[idx] );
}
return result ;
}
public static int hash(int aSeed, boolean[] aArray){
int result = aSeed;
for (int idx = 0; idx < aArray.length; ++idx){
result = hash( result, aArray[idx] );
}
return result;
}
public static int hash(int aSeed, char[] aArray){
int result = aSeed;
for ( int idx = 0; idx < aArray.length; ++idx ){
result = hash( result, aArray[idx] );
}
return result;
}
public static int hash(int aSeed, byte[] aArray){
int result = aSeed;
for ( int idx = 0; idx < aArray.length; ++idx ){
result = hash( result, aArray[idx] );
}
return result;
}
public static int hash(int aSeed, short[] aArray){
int result = aSeed;
for ( int idx = 0; idx < aArray.length; ++idx ){
result = hash( result, aArray[idx] );
}
return result;
}
public static int hash(int aSeed, int[] aArray){
int result = aSeed;
for ( int idx = 0; idx < aArray.length; ++idx ){
result = hash( result, aArray[idx] );
}
return result;
}
public static int hash(int aSeed, long[] aArray){
int result = aSeed;
for ( int idx = 0; idx < aArray.length; ++idx ){
result = hash( result, aArray[idx] );
}
return result;
}
public static int hash(int aSeed, float[] aArray){
int result = aSeed;
for ( int idx = 0; idx < aArray.length; ++idx ){
result = hash( result, aArray[idx] );
}
return result;
}
public static int hash(int aSeed, double[] aArray){
int result = aSeed;
for ( int idx = 0; idx < aArray.length; ++idx ){
result = hash( result, aArray[idx] );
}
return result;
}
private static final int fODD_PRIME_NUMBER = 37;
private static int firstTerm(int aSeed){
return fODD_PRIME_NUMBER * aSeed;
}
}