org.hpccsystems.ws.client.utils.HashCodeUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wsclient Show documentation
Show all versions of wsclient Show documentation
This project allows a user to interact with ESP services in a controlled manner. The API calls available under org.hpccsystems.ws.client.platform allow for a user to target ESP's across multiple environments running a range of hpccsystems-platform versions. There is no guarantee that if a user utilizes org.hpccsystems.ws.client.gen generated stub code from wsdl, that the calls will be backwards compatible with older hpccsystems-platform versions.
/*******************************************************************************
* Copyright (c) 2011 HPCC Systems. All rights reserved. This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: HPCC Systems - initial API and implementation
******************************************************************************/
package org.hpccsystems.ws.client.utils;
import java.lang.reflect.Array;
public final class HashCodeUtil
{
/**
* An initial value for a hashCode
, to which is added contributions from fields. Using a non-zero value
* decreases collisons of hashCode
values.
*/
public static final int SEED = 23;
/**
* booleans.
*/
public static int hash(int aSeed, boolean aBoolean)
{
return firstTerm(aSeed) + (aBoolean ? 1 : 0);
}
/**
* chars.
*/
public static int hash(int aSeed, char aChar)
{
return firstTerm(aSeed) + aChar;
}
/**
* ints.
*/
public static int hash(int aSeed, int aInt)
{
/*
* Implementation Note Note that byte and short are handled by this method, through implicit conversion.
*/
return firstTerm(aSeed) + aInt;
}
/**
* longs.
*/
public static int hash(int aSeed, long aLong)
{
return firstTerm(aSeed) + (int) (aLong ^ (aLong >>> 32));
}
/**
* floats.
*/
public static int hash(int aSeed, float aFloat)
{
return hash(aSeed, Float.floatToIntBits(aFloat));
}
/**
* doubles.
*/
public static int hash(int aSeed, double aDouble)
{
return hash(aSeed, Double.doubleToLongBits(aDouble));
}
/**
* aObject
is a possibly-null object field, and possibly an array.
*
* If aObject
is an array, then each element may be a primitive or a possibly-null object.
*/
public static int hash(int aSeed, Object aObject)
{
int result = aSeed;
if (aObject == null)
{
result = hash(result, 0);
}
else if (!isArray(aObject))
{
result = hash(result, aObject.hashCode());
}
else
{
int length = Array.getLength(aObject);
for (int idx = 0; idx < length; ++idx)
{
Object item = Array.get(aObject, idx);
// recursive call!
result = hash(result, item);
}
}
return result;
}
// / PRIVATE ///
private static final int fODD_PRIME_NUMBER = 37;
private static int firstTerm(int aSeed)
{
return fODD_PRIME_NUMBER * aSeed;
}
private static boolean isArray(Object aObject)
{
return aObject.getClass().isArray();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy