Package org.apache.datasketches.hash

# Class MurmurHash3Adaptor

java.lang.Object
org.apache.datasketches.hash.MurmurHash3Adaptor

public final class MurmurHash3Adaptor extends Object
A general purpose wrapper for the MurmurHash3.

- Inputs can be long, long[], int[], char[], byte[], double or String.
- Returns null if arrays or String is null or empty.
- Provides methods for returning the 128-bit result as either an array of 2 longs or as a byte array of 16 bytes.
- Provides modulo, asDouble and asInt functions.

Author:
  Lee Rhodes

## Method Summary

Modifier and Type
Method
Description
`static double`
`asDouble(long[] hash)`
Returns a uniform random double with a minimum inclusive value of zero and a maximum exclusive value of 1.0.
`static int`
`asInt(byte[] data, int n)`
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input data.
`static int`
`asInt(double datum, int n)`
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input double.
`static int`
`asInt(int[] data, int n)`
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input data.
`static int`
`asInt(long[] data, int n)`
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input data.
`static int`
`asInt(long datum, int n)`
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input datum.
`static int`
`asInt(String datum, int n)`
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input datum.
`static byte[]`
`hashToBytes(byte[] data, long seed)`
Hash a byte[] and long seed.
`static byte[]`
`hashToBytes(char[] data, long seed)`
Hash a char[] and long seed.
`static byte[]`
`hashToBytes(double datum, long seed)`
Hash a double and long seed.
`static byte[]`
`hashToBytes(int[] data, long seed)`
Hash an int[] and long seed.
`static byte[]`
`hashToBytes(long[] data, long seed)`
Hash a long[] and long seed.
`static byte[]`
`hashToBytes(long datum, long seed)`
Hash a long and long seed.
`static byte[]`
`hashToBytes(String datum, long seed)`
Hash a String and long seed.
`static long[]`
`hashToLongs(byte[] data, long seed)`
Hash a byte[] and long seed.
`static long[]`
`hashToLongs(char[] data, long seed)`
Hash a char[] and long seed.
`static long[]`
`hashToLongs(double datum, long seed)`
Hash a double and long seed.
`static long[]`
`hashToLongs(int[] data, long seed)`
Hash a int[] and long seed.
`static long[]`
`hashToLongs(long[] data, long seed)`
Hash a long[] and long seed.
`static long[]`
`hashToLongs(long datum, long seed)`
Hash a long and long seed.
`static long[]`
`hashToLongs(String datum, long seed)`
Hash a String and long seed.
`static int`
`modulo(long[] hash, int divisor)`
Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the divisor.
`static int`
`modulo(long h0, long h1, int divisor)`
Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the divisor.

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Method Details

### hashToBytes

public static byte[] hashToBytes(long datum, long seed)
Hash a long and long seed.

Parameters:
  `datum` - the input long value
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.

### hashToBytes

public static byte[] hashToBytes(long[] data, long seed)
Hash a long[] and long seed.

Parameters:
  `data` - the input long array
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.

### hashToBytes

public static byte[] hashToBytes(int[] data, long seed)
Hash an int[] and long seed.

Parameters:
  `data` - the input int array
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.

### hashToBytes

public static byte[] hashToBytes(char[] data, long seed)
Hash a char[] and long seed.

Parameters:
  `data` - the input char array
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.

### hashToBytes

public static byte[] hashToBytes(byte[] data, long seed)
Hash a byte[] and long seed.

Parameters:
  `data` - the input byte array
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.

### hashToBytes

public static byte[] hashToBytes(double datum, long seed)
Hash a double and long seed.

Parameters:
  `datum` - the input double
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.

### hashToBytes

public static byte[] hashToBytes(String datum, long seed)
Hash a String and long seed.

Parameters:
  `datum` - the input String
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a byte[16] in Big Endian order from 2 64-bit longs.

### hashToLongs

public static long[] hashToLongs(long datum, long seed)
Hash a long and long seed.

Parameters:
  `datum` - the input long
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a long[2].

### hashToLongs

public static long[] hashToLongs(long[] data, long seed)
Hash a long[] and long seed.

Parameters:
  `data` - the input long array.
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a long[2].

### hashToLongs

public static long[] hashToLongs(int[] data, long seed)
Hash a int[] and long seed.

Parameters:
  `data` - the input int array.
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a long[2].

### hashToLongs

public static long[] hashToLongs(char[] data, long seed)
Hash a char[] and long seed.

Parameters:
  `data` - the input char array.
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a long[2].

### hashToLongs

public static long[] hashToLongs(byte[] data, long seed)
Hash a byte[] and long seed.

Parameters:
  `data` - the input byte array.
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a long[2].

### hashToLongs

public static long[] hashToLongs(double datum, long seed)
Hash a double and long seed.

Parameters:
  `datum` - the input double.
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a long[2].

### hashToLongs

public static long[] hashToLongs(String datum, long seed)
Hash a String and long seed.

Parameters:
  `datum` - the input String.
  `seed` - A long valued seed.
Returns:
  The 128-bit hash as a long[2].

### asInt

public static int asInt(long[] data, int n)
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input data.

Parameters:
  `data` - the input long array.
  `n` - The upper exclusive bound of the integers produced. Must be > 1.
Returns:
  deterministic uniform random integer

### asInt

public static int asInt(int[] data, int n)
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input data.

Parameters:
  `data` - the input int array.
  `n` - The upper exclusive bound of the integers produced. Must be > 1.
Returns:
  deterministic uniform random integer

### asInt

public static int asInt(byte[] data, int n)
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input data.

Parameters:
  `data` - the input byte array.
  `n` - The upper exclusive bound of the integers produced. Must be > 1.
Returns:
  deterministic uniform random integer.

### asInt

public static int asInt(long datum, int n)
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input datum.

Parameters:
  `datum` - the input long
  `n` - The upper exclusive bound of the integers produced. Must be > 1.
Returns:
  deterministic uniform random integer

### asInt

public static int asInt(double datum, int n)
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input double.

Parameters:
  `datum` - the given double.
  `n` - The upper exclusive bound of the integers produced. Must be > 1.
Returns:
  deterministic uniform random integer

### asInt

public static int asInt(String datum, int n)
Returns a deterministic uniform random integer between zero (inclusive) and n (exclusive) given the input datum.

Parameters:
  `datum` - the given String.
  `n` - The upper exclusive bound of the integers produced. Must be > 1.
Returns:
  deterministic uniform random integer

### asDouble

public static double asDouble(long[] hash)
Returns a uniform random double with a minimum inclusive value of zero and a maximum exclusive value of 1.0.

The double values produced are only as random as the MurmurHash3 algorithm, which may be adequate for many applications. However, if you are looking for high guarantees of randomness you should turn to more sophisticated random generators such as Mersenne Twister or Well algorithms.

Parameters:
  `hash` - The output of the MurmurHash3.
Returns:
  the uniform random double.

### modulo

public static int modulo(long h0, long h1, int divisor)
Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the divisor.

Parameters:
  `h0` - The lower 64-bits of the 128-bit MurmurHash3 hash.
  `h1` - The upper 64-bits of the 128-bit MurmurHash3 hash.
  `divisor` - Must be positive and greater than zero.
Returns:
  the modulo result.

### modulo

public static int modulo(long[] hash, int divisor)
Returns the remainder from the modulo division of the 128-bit output of the murmurHash3 by the divisor.

Parameters:
  `hash` - The size 2 long array from the MurmurHash3.
  `divisor` - Must be positive and greater than zero.
Returns:
  the modulo result