org.apache.datasketches.memory

## Class XxHash

- java.lang.Object
- - org.apache.datasketches.memory.XxHash

    public final class XxHash
    extends Object

The XxHash is a fast, non-cryptographic, 64-bit hash function that has excellent avalanche and 2-way bit independence properties. This java version adapted the C++ version and the OpenHFT/Zero-Allocation-Hashing implementation referenced below as inspiration.

The C++ source repository: https://github.com/Cyan4973/xxHash. It has a BSD 2-Clause License: http://www.opensource.org/licenses/bsd-license.php. See LICENSE.

Portions of this code were adapted from OpenHFT/Zero-Allocation-Hashing, which has an Apache 2 license as does this site. See LICENSE.

Author:
  Lee Rhodes

### Method Summary

All Methods Static Methods Concrete Methods
`static long` `hashByteArr(byte[] arr, long offsetBytes, long lengthBytes, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long` `hashCharArr(char[] arr, long offsetChars, long lengthChars, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long` `hashDoubleArr(double[] arr, long offsetDoubles, long lengthDoubles, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long` `hashFloatArr(float[] arr, long offsetFloats, long lengthFloats, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long` `hashIntArr(int[] arr, long offsetInts, long lengthInts, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long` `hashLong(long in, long seed)` Returns a 64-bit hash from a single long.
`static long` `hashLongArr(long[] arr, long offsetLongs, long lengthLongs, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long` `hashShortArr(short[] arr, long offsetShorts, long lengthShorts, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long` `hashString(String str, long offsetChars, long lengthChars, long seed)` Hash the given arr starting at the given offset and continuing for the given length using the given seed.

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

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

### Method Detail

#### hashByteArr

    public static long hashByteArr(byte[] arr,
                                   long offsetBytes,
                                   long lengthBytes,
                                   long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetBytes` - starting at this offset
  `lengthBytes` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

#### hashShortArr

    public static long hashShortArr(short[] arr,
                                    long offsetShorts,
                                    long lengthShorts,
                                    long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetShorts` - starting at this offset
  `lengthShorts` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

#### hashCharArr

    public static long hashCharArr(char[] arr,
                                   long offsetChars,
                                   long lengthChars,
                                   long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetChars` - starting at this offset
  `lengthChars` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

#### hashIntArr

    public static long hashIntArr(int[] arr,
                                  long offsetInts,
                                  long lengthInts,
                                  long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetInts` - starting at this offset
  `lengthInts` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

#### hashLongArr

    public static long hashLongArr(long[] arr,
                                   long offsetLongs,
                                   long lengthLongs,
                                   long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetLongs` - starting at this offset
  `lengthLongs` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

#### hashLong

    public static long hashLong(long in,
                                long seed)

Returns a 64-bit hash from a single long. This method has been optimized for speed when only a single hash of a long is required.

Parameters:
  `in` - A long.
  `seed` - A long valued seed.
Returns:
  the hash.

#### hashFloatArr

    public static long hashFloatArr(float[] arr,
                                    long offsetFloats,
                                    long lengthFloats,
                                    long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetFloats` - starting at this offset
  `lengthFloats` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

#### hashDoubleArr

    public static long hashDoubleArr(double[] arr,
                                     long offsetDoubles,
                                     long lengthDoubles,
                                     long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetDoubles` - starting at this offset
  `lengthDoubles` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

#### hashString

    public static long hashString(String str,
                                  long offsetChars,
                                  long lengthChars,
                                  long seed)

Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `str` - the given string
  `offsetChars` - starting at this offset
  `lengthChars` - continuing for this length
  `seed` - the given seed
Returns:
  the hash