/**
*
*/
package edu.brown.hashing;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;
import org.voltdb.CatalogContext;
import org.voltdb.TheHashinator;
import org.voltdb.catalog.CatalogType;
import org.voltdb.catalog.Database;
import edu.brown.utils.JSONUtil;
/**
* @author pavlo
*/
public class MappedHasher extends AbstractHasher {
public enum Members {
HASH_TO_PARTITON;
}
/**
* Value Hash -> Partition #
*/
public final Map<Integer, Integer> hash_to_partition = new HashMap<Integer, Integer>();
/**
* @param catalog_db
* @param num_partitions
*/
public MappedHasher(CatalogContext catalogContext, int num_partitions) {
super(catalogContext, num_partitions);
}
@Override
public void init(CatalogContext catalogDb) {
// TODO Auto-generated method stub
}
/**
* Map a hash value to particular partition
* @param hash
* @param partition
*/
public void map(int hash, int partition) {
this.hash_to_partition.put(hash, partition);
}
@Override
public int hash(Object value) {
return (this.hash(value, this.num_partitions));
}
@Override
public int hash(Object value, CatalogType catalogItem) {
return (this.hash(value));
}
@Override
public int hash(Object value, int num_partitions) {
int hash = TheHashinator.hashToPartition(value, num_partitions);
assert(this.hash_to_partition.containsKey(hash));
return (this.hash_to_partition.get(hash));
}
@Override
public void toJSON(JSONStringer stringer) throws JSONException {
JSONUtil.fieldsToJSON(stringer, this, MappedHasher.class, MappedHasher.Members.values());
}
@Override
public void fromJSON(JSONObject json_object, Database catalog_db) throws JSONException {
JSONUtil.fieldsFromJSON(json_object, catalog_db, this, MappedHasher.class, MappedHasher.Members.values());
}
}