/*
* Transition.java
*
* Copyright (c) 1998-2001, The University of Sheffield.
*
* This file is part of GATE (see http://gate.ac.uk/), and is free
* software, licenced under the GNU Library General Public License,
* Version 2, June 1991 (in the distribution as file licence.html,
* and also available at http://gate.ac.uk/gate/licence.html).
*
* Valentin Tablan, 11/Apr/2000
*
* Minor modifications made by Luc Plamondon, Universit� de Montr�al, 27/11/03:
* - migrated original file from gate.fsm to
* ca.umontreal.iro.rali.gate.fsm package.
*
* $Id$
*/
package ca.umontreal.iro.rali.gate.fsm;
import ca.umontreal.iro.rali.gate.jape.*;
import java.util.*;
import java.io.*;
/**
* This class implements a Finite State Machine transition.
* A transition is owned by a gate.fsm.State object and contains set of
* restrictions and a reference to the next state that will be accessed after
* consuming a set of input symbols according to the restrictions.
* A transition can also hold information about the label that should be bound
* to the symbols (annotations) consumed during the state transition.
*/
// >>> DAM
/*
public class Transition implements Serializable {
*/
// >>> DAM, TransArray optimzation, now implements the Comparable interface
public class Transition implements Serializable, Comparable {
// >>> DAM, end
/** Debug flag */
private static final boolean DEBUG = false;
/**
* Default constructor. Creates a new transition with a new unique index.
* This constructor should be called by all other constructors.
*/
public Transition() {
myIndex = Transition.index++;
}
/**
* Creates a new transition using the given set of constraints and target
* state.
* @param constraints the set on constraints associated to this transition
* @param state the target state of this transition
*/
public Transition(BasicPatternElement constraints, State state) {
this();
this.constraints = constraints;
target = state;
bindings = new LinkedList();
}
/**
* Ctreates a new transition from a set of constraints, a target state and a
* list of labels to be bound with the recognized input symbols
* (aka annotations).
*/
public Transition(BasicPatternElement constraints, State state,
LinkedList bindings) {
this();
this.constraints = constraints;
target = state;
this.bindings = bindings;
}
/**
* Gets the target state of this transition
* @return an object of type gate.fsm.State
*/
public State getTarget(){ return target; }
/**
* Gets the constraints associated to this transition
*/
public BasicPatternElement getConstraints(){ return constraints; }
/**
* Returns a textual desciption of this transition.
* @return a String
*/
public String toString(){
String res = "If: " + constraints + " then ->: " + target.getIndex();
return res;
}
/**
* Returns a shorter description that toSting().
* Actually, it returns the unique index in String form.
*/
public String shortDesc(){
String res = "" + myIndex;
return res;
}
/**
* Returns the list of bindings associated to this transition
*/
public LinkedList getBindings(){ return bindings; }
/**
* The constraints on this transition.
*/
private BasicPatternElement constraints;
/**
* The state this transition leads to
*/
private State target;
/**
* A list with all the labels associated to the annotations recognized by
* this transition.
* We need to use the actual object and not the interface (java.util.List)
* because we need this object to be cloneable
*/
private LinkedList bindings;
/** The unique index of this transition. This value is not used by any of
* the algorithms. It is only provided as a convenient method of identifying
* the transitions in textual representations (toString() and GML related
* methods)
*/
private int myIndex;
/** Static member used for generating unique IDs for the objects of type
* Transition*/
private static int index = 0;
// >>> DAM, TransArray optimzation, now implements the Comparable interface
public int compareTo(Object o)
throws ClassCastException
{
if (!(o instanceof Transition)) throw new ClassCastException("gate.frm.Transition(compareTo)");
return myIndex - ((Transition)o).myIndex;
}
// >>> DAM, end
} // Transition