package edu.uw.zookeeper.common;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.base.Function;
import com.google.common.base.Optional;
public interface Automaton<Q, I> extends Stateful<Q>, Function<I, Optional<Automaton.Transition<Q>>> {
public static class Transition<Q> extends AbstractPair<Q, Q> {
public static <Q> Transition<Q> create(Q from, Q to) {
return new Transition<Q>(from, to);
}
private Transition(Q from, Q to) {
super(checkNotNull(from), checkNotNull(to));
}
public Q from() {
return first;
}
public Q to() {
return second;
}
}
}