package iitb.Model;
import iitb.CRF.DataSequence;
/**
*
* @author Sunita Sarawagi
* @since 1.0
* @version 1.3
*/
public class CompleteModel extends Model {
/**
*
*/
private static final long serialVersionUID = 9000160197804401741L;
public CompleteModel(int nlabels) {
super(nlabels);
name = "Complete";
}
public int numStates() {return numLabels;}
public int label(int stateNum) {return stateNum;}
public int numEdges() {return numLabels*numLabels;}
public int numStartStates() {return numLabels;}
public int numEndStates() {return numLabels;}
public int startState(int i) {
if (i < numStartStates())
return i;
return -1;
}
public int endState(int i) {
if (i < numEndStates())
return i;
return -1;
}
public void stateMappings(DataSequence data) throws Exception {;}
public void stateMappings(DataSequence data, int len, int start) throws Exception{;}
public boolean isEndState(int i) {return true;}
public boolean isStartState(int i) {return true;}
public class SingleEdgeIterator implements EdgeIterator {
CompleteModel model;
Edge edge;
Edge edgeToReturn;
SingleEdgeIterator(CompleteModel m) {
model = m;
edge = new Edge();
edgeToReturn = new Edge();
start();
};
public void start() {
edge.start = 0;
edge.end = 0;
}
public boolean hasNext() {
return (edge.start < model.numStates());
}
public Edge next() {
edgeToReturn.start = edge.start;
edgeToReturn.end = edge.end;
edge.end++;
if (edge.end == model.numStates()) {
edge.end= 0;
edge.start++;
}
return edgeToReturn;
}
public boolean nextIsOuter() {
return true;
}
};
public EdgeIterator edgeIterator() {
return new SingleEdgeIterator(this);
}
/* (non-Javadoc)
* @see iitb.Model.Model#innerEdgeIterator()
*/
public EdgeIterator innerEdgeIterator() {
return null;
}
};