/*
* Created on 14.01.2008
* Caleido AG, All Rights Reserved
* Author: Luzius Meisser
*/
package quickbase.internal.entries;
import quickbase.exception.SerializationDatabaseException;
import quickbase.serializer.ISerializer;
public class HashFunction<K> {
private static final int HASH_MULTIPLICATOR = 1372819921;
private static final int HASH_ADDER = -412231553;
protected ISerializer<K> keySerializer;
public HashFunction(ISerializer<K> keySerializer) {
this.keySerializer = keySerializer;
}
public int getHash(K key) throws SerializationDatabaseException {
byte[] data = keySerializer.toBytes(key);
return calcHash(data);
}
public int getHash(Entry entry) {
return calcHash(entry.getKey());
}
private int calcHash(byte[] key){
int h = 0;
int len = key.length;
for (int i = 0; i < len; i++) {
h = (HASH_MULTIPLICATOR * h + key[i]) ^ HASH_ADDER;
}
return h;
}
}