package org.hypergraphdb.indexing; import java.util.Comparator; import org.hypergraphdb.HGHandle; import org.hypergraphdb.HyperGraph; import org.hypergraphdb.indexing.HGKeyIndexer; import org.hypergraphdb.storage.ByteArrayConverter; import org.hypergraphdb.type.HGPrimitiveType; /** * <p> * Index atoms directly by their values serialized as byte[]. The type of the atoms * indexed is assumed to be an instance of {@link HGPrimitiveType} so that a * {@link ByteArrayConverter} and a <code>Comparator</code> are made available. * </p> * * @author borislav * * @param <AtomType> */ public class DirectValueIndexer<AtomType> extends HGKeyIndexer<AtomType> { public DirectValueIndexer() { } public DirectValueIndexer(HGHandle type) { super(type); } @SuppressWarnings("unchecked") @Override public ByteArrayConverter<AtomType> getConverter(HyperGraph graph) { return (ByteArrayConverter<AtomType>) graph.get(this.getType()); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Comparator<byte[]> getComparator(HyperGraph graph) { return ((HGPrimitiveType) graph.get(this.getType())).getComparator(); } @SuppressWarnings("unchecked") @Override public AtomType getKey(HyperGraph graph, Object atom) { return (AtomType) atom; } public int hashCode() { return getType().hashCode(); } @SuppressWarnings("unchecked") public boolean equals(Object x) { if (!(x instanceof DirectValueIndexer)) return false; return getType().equals(((DirectValueIndexer<AtomType>) x).getType()); } }