Browse Source

Refactor exportToDot methods for explicit model classes - subclasses just need to export their transitions, so it is easier to add more functionality regarding state info.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@8389 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 12 years ago
parent
commit
d3a267a2dc
  1. 19
      prism/src/explicit/DTMCExplicit.java
  2. 36
      prism/src/explicit/MDPExplicit.java
  3. 23
      prism/src/explicit/ModelExplicit.java
  4. 38
      prism/src/explicit/STPGAbstrSimple.java
  5. 6
      prism/src/param/ParamModel.java

19
prism/src/explicit/DTMCExplicit.java

@ -96,21 +96,14 @@ public abstract class DTMCExplicit extends ModelExplicit implements DTMC
}
@Override
public void exportToDotFile(PrismLog out, BitSet mark)
public void exportTransitionsToDotFile(int i, PrismLog out)
{
int i;
out.print("digraph " + getModelType() + " {\nsize=\"8,5\"\nnode [shape=box];\n");
for (i = 0; i < numStates; i++) {
if (mark != null && mark.get(i))
out.print(i + " [style=filled fillcolor=\"#cccccc\"]\n");
Iterator<Map.Entry<Integer, Double>> iter = getTransitionsIterator(i);
while (iter.hasNext()) {
Map.Entry<Integer, Double> e = iter.next();
out.print(i + " -> " + e.getKey() + " [ label=\"");
out.print(e.getValue() + "\" ];\n");
}
Iterator<Map.Entry<Integer, Double>> iter = getTransitionsIterator(i);
while (iter.hasNext()) {
Map.Entry<Integer, Double> e = iter.next();
out.print(i + " -> " + e.getKey() + " [ label=\"");
out.print(e.getValue() + "\" ];\n");
}
out.print("}\n");
}
@Override

36
prism/src/explicit/MDPExplicit.java

@ -108,32 +108,26 @@ public abstract class MDPExplicit extends ModelExplicit implements MDP
}
@Override
public void exportToDotFile(PrismLog out, BitSet mark)
public void exportTransitionsToDotFile(int i, PrismLog out)
{
int i, j, numChoices;
int j, numChoices;
String nij;
Object action;
out.print("digraph " + getModelType() + " {\nsize=\"8,5\"\nnode [shape=box];\n");
for (i = 0; i < numStates; i++) {
if (mark != null && mark.get(i))
out.print(i + " [style=filled fillcolor=\"#cccccc\"]\n");
numChoices = getNumChoices(i);
for (j = 0; j < numChoices; j++) {
action = getAction(i, j);
nij = "n" + i + "_" + j;
out.print(i + " -> " + nij + " [ arrowhead=none,label=\"" + j);
if (action != null)
out.print(":" + action);
out.print("\" ];\n");
out.print(nij + " [ shape=point,width=0.1,height=0.1,label=\"\" ];\n");
Iterator<Map.Entry<Integer, Double>> iter = getTransitionsIterator(i, j);
while (iter.hasNext()) {
Map.Entry<Integer, Double> e = iter.next();
out.print(nij + " -> " + e.getKey() + " [ label=\"" + e.getValue() + "\" ];\n");
}
numChoices = getNumChoices(i);
for (j = 0; j < numChoices; j++) {
action = getAction(i, j);
nij = "n" + i + "_" + j;
out.print(i + " -> " + nij + " [ arrowhead=none,label=\"" + j);
if (action != null)
out.print(":" + action);
out.print("\" ];\n");
out.print(nij + " [ shape=point,width=0.1,height=0.1,label=\"\" ];\n");
Iterator<Map.Entry<Integer, Double>> iter = getTransitionsIterator(i, j);
while (iter.hasNext()) {
Map.Entry<Integer, Double> e = iter.next();
out.print(nij + " -> " + e.getKey() + " [ label=\"" + e.getValue() + "\" ];\n");
}
}
out.print("}\n");
}
@Override

23
prism/src/explicit/ModelExplicit.java

@ -319,8 +319,29 @@ public abstract class ModelExplicit implements Model
}
@Override
public abstract void exportToDotFile(PrismLog out, BitSet mark);
public void exportToDotFile(PrismLog out, BitSet mark)
{
int i;
// Header
out.print("digraph " + getModelType() + " {\nsize=\"8,5\"\nnode [shape=box];\n");
for (i = 0; i < numStates; i++) {
// Style for each state
if (mark != null && mark.get(i))
out.print(i + " [style=filled fillcolor=\"#cccccc\"]\n");
// Transitions for state i
exportTransitionsToDotFile(i, out);
}
// Footer
out.print("}\n");
}
/**
* Export the transitions from state {@code i} in Dot format to {@code out}.
* @param i State index
* @param out PrismLog for output
*/
protected abstract void exportTransitionsToDotFile(int i, PrismLog out);
@Override
public abstract void exportToPrismLanguage(String filename) throws PrismException;

38
prism/src/explicit/STPGAbstrSimple.java

@ -394,33 +394,27 @@ public class STPGAbstrSimple extends ModelExplicit implements STPG, NondetModelS
}
@Override
public void exportToDotFile(PrismLog out, BitSet mark)
protected void exportTransitionsToDotFile(int i, PrismLog out)
{
int i, j, k;
int j, k;
String nij, nijk;
out.print("digraph " + getModelType() + " {\nsize=\"8,5\"\nnode [shape=box];\n");
for (i = 0; i < numStates; i++) {
if (mark != null && mark.get(i))
out.print(i + " [style=filled fillcolor=\"#cccccc\"]\n");
j = -1;
for (DistributionSet distrs : trans.get(i)) {
j++;
nij = "n" + i + "_" + j;
out.print(i + " -> " + nij + " [ arrowhead=none,label=\"" + j + "\" ];\n");
out.print(nij + " [ shape=circle,width=0.1,height=0.1,label=\"\" ];\n");
k = -1;
for (Distribution distr : distrs) {
k++;
nijk = "n" + i + "_" + j + "_" + k;
out.print(nij + " -> " + nijk + " [ arrowhead=none,label=\"" + k + "\" ];\n");
out.print(nijk + " [ shape=point,label=\"\" ];\n");
for (Map.Entry<Integer, Double> e : distr) {
out.print(nijk + " -> " + e.getKey() + " [ label=\"" + e.getValue() + "\" ];\n");
}
j = -1;
for (DistributionSet distrs : trans.get(i)) {
j++;
nij = "n" + i + "_" + j;
out.print(i + " -> " + nij + " [ arrowhead=none,label=\"" + j + "\" ];\n");
out.print(nij + " [ shape=circle,width=0.1,height=0.1,label=\"\" ];\n");
k = -1;
for (Distribution distr : distrs) {
k++;
nijk = "n" + i + "_" + j + "_" + k;
out.print(nij + " -> " + nijk + " [ arrowhead=none,label=\"" + k + "\" ];\n");
out.print(nijk + " [ shape=point,label=\"\" ];\n");
for (Map.Entry<Integer, Double> e : distr) {
out.print(nijk + " -> " + e.getKey() + " [ label=\"" + e.getValue() + "\" ];\n");
}
}
}
out.print("}\n");
}
@Override

6
prism/src/param/ParamModel.java

@ -207,6 +207,12 @@ final class ParamModel extends ModelExplicit
throw new UnsupportedOperationException();
}
@Override
protected void exportTransitionsToDotFile(int i, PrismLog out)
{
throw new UnsupportedOperationException();
}
@Override
public void exportToPrismLanguage(String filename) throws PrismException
{

Loading…
Cancel
Save