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; } }