Package org.wildfly.common.math
Class HashMath
java.lang.Object
org.wildfly.common.math.HashMath
Routines which are useful for hashcode computation, among other things.
- Author:
- David M. Lloyd
-
Method Summary
Modifier and TypeMethodDescriptionstatic intmultiHashOrdered(int accumulatedHash, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, b), a) ≠ₙ f(f(k, a), b).static intmultiHashOrdered(int accumulatedHash, int prime, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, p2, b), p1, a) ≠ₙ f(f(k, p1, a), p2, b).static intmultiHashUnordered(int accumulatedHash, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, b), a) = f(f(k, a), b).static intmultiHashUnordered(int accumulatedHash, int prime, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, p2, b), p1, a) = f(f(k, p1, a), p2, b).static intmultiplyWrap(int a, int b) Multiply two unsigned integers together.static introundToPowerOfTwo(int value) Round the given value up to the next positive power of two.
-
Method Details
-
roundToPowerOfTwo
public static int roundToPowerOfTwo(int value) Round the given value up to the next positive power of two.- Parameters:
value- the value (must not be negative and must be less than or equal to2^31)- Returns:
- the rounded power of two value
-
multiHashOrdered
public static int multiHashOrdered(int accumulatedHash, int prime, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, p2, b), p1, a) ≠ₙ f(f(k, p1, a), p2, b). This function is suitable for object chains whose order affects the overall equality of the hash code.The exact algorithm is not specified and is therefore subject to change and should not be relied upon for hash codes that persist outside of the JVM process.
- Parameters:
accumulatedHash- the accumulated hash code of the previous stageprime- a prime multipliernextHash- the hash code of the next single item- Returns:
- the new accumulated hash code
-
multiHashUnordered
public static int multiHashUnordered(int accumulatedHash, int prime, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, p2, b), p1, a) = f(f(k, p1, a), p2, b). This function is suitable for object chains whose order does not affect the overall equality of the hash code.The exact algorithm is not specified and is therefore subject to change and should not be relied upon for hash codes that persist outside of the JVM process.
- Parameters:
accumulatedHash- the accumulated hash code of the previous stageprime- a prime multipliernextHash- the hash code of the next single item- Returns:
- the new accumulated hash code
-
multiHashOrdered
public static int multiHashOrdered(int accumulatedHash, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, b), a) ≠ₙ f(f(k, a), b). This function is suitable for object chains whose order affects the overall equality of the hash code.The exact algorithm is not specified and is therefore subject to change and should not be relied upon for hash codes that persist outside of the JVM process.
- Parameters:
accumulatedHash- the accumulated hash code of the previous stagenextHash- the hash code of the next single item- Returns:
- the new accumulated hash code
-
multiHashUnordered
public static int multiHashUnordered(int accumulatedHash, int nextHash) A hash function which combines an accumulated hash with a next hash such thatf(f(k, b), a) = f(f(k, a), b). This function is suitable for object chains whose order does not affect the overall equality of the hash code.The exact algorithm is not specified and is therefore subject to change and should not be relied upon for hash codes that persist outside of the JVM process.
- Parameters:
accumulatedHash- the accumulated hash code of the previous stagenextHash- the hash code of the next single item- Returns:
- the new accumulated hash code
-
multiplyWrap
public static int multiplyWrap(int a, int b) Multiply two unsigned integers together. If the result overflows a 32-bit number, XOR the overflowed bits back into the result. This operation is commutative, i.e. if we designate the⨰symbol to represent this operation, thena ⨰ b = b ⨰ a. This operation is not associative, i.e.(a ⨰ b) ⨰ c ≠ₙ a ⨰ (b ⨰ c)(the symbol≠ₙmeaning "not necessarily equal to"), therefore this operation is suitable for ordered combinatorial hash functions.- Parameters:
a- the first number to multiplyb- the second number to multiply- Returns:
- the wrapped multiply result
-