package org.maltparser.parser.transition;
/**
* Transition contains one individual transition. For example, Nivre arc-eager
* algorithms have the unlabeled transition
* <code>SH</code>,
* <code>RE</code> and the labeled transition<code>RA</code>,
* <code>LA</code>. These transition will be four individual transition.
*
* @author Joakim Nivre
* @author Johan Hall
* @since 1.0
*/
public class Transition implements Comparable<Transition> {
/**
* Transition code
*/
private int code;
/**
* Transition symbol
*/
private String symbol;
/**
* <code>true</code> if the transition is labeled, otherwise
* <code>false</code>
*/
private boolean labeled;
private int cachedHash;
/**
* Creates a transition
*
* @param code Transition code
* @param symbol Transition name
* @param labeled
* <code>true</code> if the transition is labeled, otherwise
* <code>false</code>
*/
public Transition(int code, String symbol, boolean labeled) {
this.code = code;
this.symbol = symbol;
this.labeled = labeled;
}
/**
* Returns the transition code
*
* @return the transition code
*/
public int getCode() {
return code;
}
/**
* Returns the transition symbol
*
* @return the transition symbol
*/
public String getSymbol() {
return symbol;
}
/**
* Returns true if the transition is labeled, otherwise false
*
* @return
* <code>true</code> if the transition is labeled, otherwise
* <code>false</code>
*/
public boolean isLabeled() {
return labeled;
}
public int compareTo(Transition that) {
final int BEFORE = -1;
final int EQUAL = 0;
final int AFTER = 1;
// if ( this == that ) return EQUAL;
if (this.code < that.code) {
return BEFORE;
}
if (this.code > that.code) {
return AFTER;
}
return EQUAL;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Transition t = (Transition) obj;
return (code == t.code && symbol.equals(t.symbol) && labeled == t.isLabeled());
}
@Override
public int hashCode() {
if (cachedHash == 0) {
int hash = 31 * 7 + code;
hash = 31 * hash + (null == symbol ? 0 : symbol.hashCode());
hash = 31 * hash + (labeled ? 1 : 0);
cachedHash = hash;
}
return cachedHash;
}
/*
* (non-Javadoc) @see java.lang.Object#toString()
*/
@Override
public String toString() {
return symbol + " [" + code + "] " + labeled;
}
}