/** CompleteModelNoSelfLoop.java
* Created on Jan 29, 2008
*
* @author Sunita Sarawagi
* @since 1.3
* @version 1.3
*/
package iitb.Model;
import java.util.BitSet;
import java.util.StringTokenizer;
/*
* No self loop in any label except "other"
*/
public class CompleteModelNoSelfLoop extends GenericModel {
/**
*
*/
private static final long serialVersionUID = -8650040567397288593L;
public CompleteModelNoSelfLoop(String spec, int numLabels) throws Exception {
super(numLabels,0);
StringTokenizer tokens = new StringTokenizer(spec,":");
tokens.nextToken(); // this is the name of the model.
BitSet dupLabels = new BitSet(numLabels);
while (tokens.hasMoreTokens()) {
dupLabels.set(Integer.parseInt(tokens.nextToken()));
}
_edges = new Edge[numLabels*numLabels-numLabels+dupLabels.cardinality()];
startStates = new int[numLabels];
for (int i = 0; i < numLabels; i++) {
startStates[i] = i;
}
endStates = new int[numLabels];
for (int i = 0; i < endStates.length; i++) {
endStates[i] = i;
}
edgeStart = new int[numLabels];
for (int i = 0, edgeNum=0; i < numLabels; i++) {
edgeStart[i] = edgeNum;
for (int j = 0; j < numLabels; j++) {
if (!dupLabels.get(i) && (i == j))
continue;
Edge edge = new Edge(i,j);
_edges[edgeNum++] = edge;
}
}
}
}