akka.routing
Class MurmurHash$

java.lang.Object
  extended by akka.routing.MurmurHash$

public class MurmurHash$
extends java.lang.Object

An object designed to generate well-distributed non-cryptographic hashes. It is designed to hash a collection of integers; along with the integers to hash, it generates two magic streams of integers to increase the distribution of repetitive input sequences. Thus, three methods need to be called at each step (to start and to incorporate a new integer) to update the values. Only one method needs to be called to finalize the hash.


Field Summary
static MurmurHash$ MODULE$
          Static reference to the singleton instance of this Scala object.
 
Constructor Summary
MurmurHash$()
           
 
Method Summary
<T> int
arrayHash(java.lang.Object a)
          Compute a high-quality hash of an array
 int extendHash(int hash, int value, int magicA, int magicB)
          Incorporates a new value into an existing hash.
 int finalizeHash(int hash)
          Once all hashes have been incorporated, this performs a final mixing
 int nextMagicA(int magicA)
          Given a magic integer from the first stream, compute the next
 int nextMagicB(int magicB)
          Given a magic integer from the second stream, compute the next
 int startHash(int seed)
          Begin a new hash with a seed value.
 int startMagicA()
          The initial magic integers in the first stream.
 int startMagicB()
          The initial magic integer in the second stream.
 int stringHash(java.lang.String s)
          Compute a high-quality hash of a string
<T> int
symmetricHash(scala.collection.TraversableOnce<T> xs, int seed)
          Compute a hash that is symmetric in its arguments--that is, where the order of appearance of elements does not matter.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MODULE$

public static final MurmurHash$ MODULE$
Static reference to the singleton instance of this Scala object.

Constructor Detail

MurmurHash$

public MurmurHash$()
Method Detail

startHash

public int startHash(int seed)
Begin a new hash with a seed value.


startMagicA

public int startMagicA()
The initial magic integers in the first stream.


startMagicB

public int startMagicB()
The initial magic integer in the second stream.


extendHash

public int extendHash(int hash,
                      int value,
                      int magicA,
                      int magicB)
Incorporates a new value into an existing hash.

Parameters:
hash - the prior hash value
value - the new value to incorporate
magicA - a magic integer from the stream
magicB - a magic integer from a different stream
Returns:
the updated hash value

nextMagicA

public int nextMagicA(int magicA)
Given a magic integer from the first stream, compute the next


nextMagicB

public int nextMagicB(int magicB)
Given a magic integer from the second stream, compute the next


finalizeHash

public int finalizeHash(int hash)
Once all hashes have been incorporated, this performs a final mixing


arrayHash

public <T> int arrayHash(java.lang.Object a)
Compute a high-quality hash of an array


stringHash

public int stringHash(java.lang.String s)
Compute a high-quality hash of a string


symmetricHash

public <T> int symmetricHash(scala.collection.TraversableOnce<T> xs,
                             int seed)
Compute a hash that is symmetric in its arguments--that is, where the order of appearance of elements does not matter. This is useful for hashing sets, for example.