You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

161 lines
3.6 KiB

//==============================================================================
//
// Copyright (c) 2002-
// Authors:
// * Dave Parker <david.parker@comlab.ox.ac.uk> (University of Oxford)
//
//------------------------------------------------------------------------------
//
// This file is part of PRISM.
//
// PRISM is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// PRISM is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with PRISM; if not, write to the Free Software Foundation,
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//==============================================================================
package pta;
import java.io.IOException;
import java.io.Writer;
import java.util.*;
import prism.PrismException;
public class Edge
{
// Parent transition;
private Transition parent;
// Probability
private double prob;
// Destination location
private int dest;
// Resets
private HashMap<Integer, Integer> resets;
/**
* Create an empty edge.
* @param parent Parent transition
* @param prob Probability
* @param dest destination location
*/
public Edge(Transition parent, double prob, int dest)
{
this.parent = parent;
this.prob = prob;
this.dest = dest;
resets = new HashMap<Integer, Integer>();
}
/**
* Copy constructor.
*/
public Edge(Edge edge)
{
this(edge.parent, edge.prob, edge.dest);
for (Map.Entry<Integer, Integer> e : edge.resets.entrySet()) {
addReset(e.getKey(), e.getValue());
}
}
public void setProb(double prob)
{
this.prob = prob;
}
public void setDestination(int dest)
{
this.dest = dest;
}
public void setParent(Transition parent)
{
this.parent = parent;
}
public void addReset(int clock)
{
addReset(clock, 0);
}
public void addReset(int clock, int val)
{
resets.put(clock, val);
}
public Transition getParent()
{
return parent;
}
public int getDestination()
{
return dest;
}
public double getProbability()
{
return prob;
}
public Iterable<Map.Entry<Integer, Integer>> getResets()
{
return resets.entrySet();
}
/**
* Perform some basic syntactic checks.
*/
public void check() throws PrismException
{
}
public String toString()
{
boolean first = true;
String s = "";
s += prob + " : {";
for (Map.Entry<Integer, Integer> e : resets.entrySet()) {
if (first)
first = false;
else
s += ",";
s += parent.getParent().getClockName(e.getKey());
s += "=" + e.getValue();
}
s += "}" + parent.getParent().getLocationName(dest);
return s;
}
public void writeToDesFile(Writer out, String actionPrefix, Iterable<Constraint> guard) throws PrismException,
IOException
{
boolean first;
PTA pta = parent.getParent();
out.write("\t" + actionPrefix + "tran ");
out.write(pta.getLocationName(dest).toString().replace(':', '_') + "; ");
out.write(Constraint.toStringList(pta, guard));
out.write("; ");
first = true;
for (Map.Entry<Integer, Integer> e : resets.entrySet()) {
if (first)
first = false;
else
out.write(",");
out.write(pta.getClockName(e.getKey()) + "=" + e.getValue());
}
if (first)
out.write("null");
out.write("; " + prob + "\n");
}
}