package edu.umd.hooka; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.WritableComparable; public final class WordPair implements WritableComparable { int f_langWord; int e_langWord; public WordPair() {} public WordPair(int e, int f) { setE(e); setF(f); } public void setFLanguageCode(int lc) { lc <<= 24; f_langWord &= 0x00ffffff; f_langWord |= lc; } public void setELanguageCode(int lc) { lc <<= 24; e_langWord &= 0x00ffffff; e_langWord |= lc; } public byte getFLanguageCode() { return (byte)(f_langWord >> 24); } public byte getELanguageCode() { return (byte)(e_langWord >> 24); } public void setF(int f) { f_langWord &= 0xff000000; f_langWord |= f; } public void setE(int e) { e_langWord &= 0xff000000; e_langWord |= e; } public int getF() { return (f_langWord & 0x00ffffff); } public int getE() { return (e_langWord & 0x00ffffff); } public void makeEMarginal() { e_langWord = -1; } public boolean isEMarginal() { return (e_langWord == -1); } public void readFields(DataInput in) throws IOException { f_langWord = in.readInt(); e_langWord = in.readInt(); } public void write(DataOutput out) throws IOException { out.writeInt(f_langWord); out.writeInt(e_langWord); } public int compareTo(Object o) { WordPair that = (WordPair)o; if (this.e_langWord != that.e_langWord) return this.e_langWord - that.e_langWord; return this.f_langWord - that.f_langWord; } public int hashCode() { return f_langWord; } public void set(WordPair rhs) { f_langWord = rhs.f_langWord; e_langWord = rhs.e_langWord; } public void swap() { int t = f_langWord; f_langWord = e_langWord; e_langWord = t; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("{ F(").append(getFLanguageCode()).append("):") .append(getF()).append(" , "); if (e_langWord == -1) { sb.append("* }"); } else { sb.append("E(").append(getELanguageCode()).append("):") .append(getE()).append(" }"); } return sb.toString(); } public String toString(Vocab vf, Vocab ve) { StringBuffer sb = new StringBuffer(); sb.append("{ ").append(vf.get(getF())).append(" , "); if (e_langWord == -1) { sb.append("* }"); } else { sb.append(ve.get(getE())).append(" }"); } return sb.toString(); } }