@Override public <T> long hash(T input, Access<T> access, long off, long len) { long hash; if (access.byteOrder(input) == LITTLE_ENDIAN) { hash = CityAndFarmHash_1_1.INSTANCE.cityHash64(access, input, off, len); } else { hash = BigEndian.INSTANCE.cityHash64(access, input, off, len); } return finalize(hash); }
@Override public <T> long hash(T input, Access<T> access, long off, long len) { long hash; if (access.byteOrder(input) == LITTLE_ENDIAN) { hash = CityAndFarmHash_1_1.INSTANCE.naHash64(access, input, off, len); } else { hash = BigEndian.INSTANCE.naHash64(access, input, off, len); } return finalize(hash); } }
@Override public <T> long hash(T input, Access<T> access, long off, long len) { long seed = seed(); if (access.byteOrder(input) == LITTLE_ENDIAN) { return MetroHash.INSTANCE.metroHash64(seed, input, access, off, len); } else { return MetroHash.BigEndian.INSTANCE.metroHash64(seed, input, access, off, len); } } }
@Override public <T> long hash(T input, Access<T> access, long off, long len) { CityAndFarmHash_1_1 instance = access.byteOrder(input) == LITTLE_ENDIAN ? CityAndFarmHash_1_1.INSTANCE : BigEndian.INSTANCE; if (len <= 64) { return finalize(instance.naHash64(access, input, off, len)); } return instance.uoHash64WithSeeds(access, input, off, len, 0, seed1); } }
@Override public long hashInt(int input) { input = NATIVE_CITY.toLittleEndian(input); long unsignedInt = Primitives.unsignedInt(input); long hash = hash4To7Bytes(4L, unsignedInt, unsignedInt); return finalize(hash); }
@Override public <T> long hash(T input, Access<T> access, long off, long len) { if (access.byteOrder(input) == LITTLE_ENDIAN) { return CityAndFarmHash_1_1.INSTANCE.uoHash64WithSeeds( access, input, off, len, seed0, seed1); } else { return BigEndian.INSTANCE.uoHash64WithSeeds(access, input, off, len, seed0, seed1); } } }
@Override public long hashByte(byte input) { int unsignedByte = Primitives.unsignedByte(input); long hash = hash1To3Bytes(1, unsignedByte, unsignedByte, unsignedByte); return finalize(hash); }
@Override public long hashShort(short input) { return hashNativeLong( (long) NATIVE_MURMUR.toLittleEndianShort(Primitives.unsignedShort(input)), 2L); }
@Override public long hashLong(long input) { input = NATIVE_CITY.toLittleEndian(input); long hash = hash8To16Bytes(8L, input, input); return finalize(hash); }
@Override public <T> long hash(T input, Access<T> access, long off, long len) { CityAndFarmHash_1_1 instance = access.byteOrder(input) == LITTLE_ENDIAN ? CityAndFarmHash_1_1.INSTANCE : BigEndian.INSTANCE; if (len <= 64) { return instance.naHash64(access, input, off, len); } return instance.uoHash64WithSeeds(access, input, off, len, 81, 0); } }
@Override public long hashInt(int input) { return hashNativeLong(unsignedInt(NATIVE_MURMUR.toLittleEndian(input)), 4L); }
@Override public long hashInt(int input) { input = NATIVE_XX.toLittleEndian(input); long hash = seed() + P5 + 4; hash ^= Primitives.unsignedInt(input) * P1; hash = Long.rotateLeft(hash, 23) * P2 + P3; return XxHash.finalize(hash); }
@Override public long hashChar(char input) { int unsignedInput = (int) input; int firstByte = (unsignedInput >> FIRST_SHORT_BYTE_SHIFT) & FIRST_SHORT_BYTE_MASK; int secondByte = (unsignedInput >> SECOND_SHORT_BYTE_SHIFT) & SECOND_SHORT_BYTE_MASK; long hash = hash1To3Bytes(2, firstByte, secondByte, secondByte); return finalize(hash); }
@Override public int getUnsignedByte(ByteBuffer input, long offset) { return Primitives.unsignedByte(getByte(input, offset)); }
@Override public int getUnsignedShort(ByteBuffer input, long offset) { return Primitives.unsignedShort(getShort(input, offset)); }
@Override public long hashByte(byte input) { return hashNativeLong((long) Primitives.unsignedByte((int) input), 1L); }
@Override public long hashLong(long input) { return hashNativeLong(NATIVE_MURMUR.toLittleEndian(input), 8L); }
@Override public long hashChar(char input) { return hashNativeLong((long) NATIVE_MURMUR.toLittleEndianShort((int) input), 2L); }