package ivory.lsh.data; import org.apache.hadoop.io.WritableComparable; import tl.lin.data.array.ArrayListOfIntsWritable; /** * Abstract class for signatures. * @author ferhanture * */ @SuppressWarnings("unchecked") public abstract class Signature implements WritableComparable { public Signature() { super(); } public Signature(int size) { } public Signature(Signature p) { } public abstract int size(); public abstract String toString(); public abstract Signature getSubSignature(int start, int end); public abstract Signature getSubSignature(int start, int end, Signature subSign); /** * @param signature * @return compute hamming distance between this object and signature. */ public abstract int hammingDistance(Signature signature); /** * @param signature * @param threshold * @return compute hamming distance between this object and signature. early terminate if distance exceeds threshold. */ public abstract int hammingDistance(Signature signature, int threshold); /** * @param permutation * permute this object w.r.t permutation object and save permuted signature in permSign */ public abstract void perm(ArrayListOfIntsWritable permutation, Signature permSign); /** * @param permutation * @return permute this object w.r.t permutation object and return permuted signature */ public abstract Signature perm(ArrayListOfIntsWritable permutation); @SuppressWarnings("unchecked") public static Signature createSignature(Class subClass, int size){ if(subClass.equals(NBitSignature.class) || subClass.equals(SixtyFourBitSignature.class)){ return new NBitSignature(size); }else if(subClass.equals(MinhashSignature.class)){ return new MinhashSignature(size); }else{ throw new RuntimeException("Unidentified class"); } } public int getLongestPrefix(Signature signature) { return 0; } }