package edu.cmu.sphinx.linguist.allphone;
import edu.cmu.sphinx.linguist.SearchState;
import edu.cmu.sphinx.linguist.SearchStateArc;
import edu.cmu.sphinx.linguist.WordSequence;
import edu.cmu.sphinx.linguist.acoustic.Unit;
public class PhoneNonEmittingSearchState implements SearchState, SearchStateArc {
protected Unit unit;
protected AllphoneLinguist linguist;
private float insertionProb;
private float languageProb;
public PhoneNonEmittingSearchState(Unit unit, AllphoneLinguist linguist, float insertionProb, float languageProb) {
this.unit = unit;
this.linguist = linguist;
this.insertionProb = insertionProb;
this.languageProb = languageProb;
}
public SearchStateArc[] getSuccessors() {
SearchStateArc[] result = new SearchStateArc[1];
result[0] = new PhoneWordSearchState(unit, linguist, insertionProb, languageProb);
return result;
}
public boolean isEmitting() {
return false;
}
public boolean isFinal() {
return false;
}
public String toPrettyString() {
return "Unit " + unit.toString();
}
public String getSignature() {
return null;
}
public WordSequence getWordHistory() {
return null;
}
public int getOrder() {
return 0;
}
public SearchState getState() {
return this;
}
public float getProbability() {
return getLanguageProbability() + getInsertionProbability();
}
public float getLanguageProbability() {
return languageProb;
}
public float getInsertionProbability() {
return insertionProb;
}
public Object getLexState() {
return null;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof PhoneNonEmittingSearchState))
return false;
boolean haveSameBaseId = ((PhoneNonEmittingSearchState)obj).unit.getBaseID() == unit.getBaseID();
boolean haveSameContex = ((PhoneNonEmittingSearchState)obj).unit.getContext().equals(unit.getContext());
return haveSameBaseId && haveSameContex;
}
@Override
public int hashCode() {
return unit.getContext().hashCode() * 91 + unit.getBaseID();
}
}