package pl.edu.amu.wmi.daut.base;
import java.util.List;
import java.util.LinkedList;
/**
* Ukonkretnienie klasy abstrakcyjnej AutomatonSpecification.
*/
class NotNaiveAutomatonSpecification extends AutomatonSpecification {
static class NotNaiveState implements State {
/**
* Konstruuje stan.
*/
public NotNaiveState() {
}
public List<OutgoingTransition> returnOutgoingTrasitions() {
return outgoingTransitions;
}
private LinkedList<OutgoingTransition> outgoingTransitions
= new LinkedList<OutgoingTransition>();
}
public NotNaiveState addState() {
NotNaiveState newState = new NotNaiveState();
allStates.add(newState);
return newState;
}
public void addTransition(State from, State to, TransitionLabel transitionLabel) {
((NotNaiveState) from).outgoingTransitions.add(new
OutgoingTransition(transitionLabel, (State) to));
}
public void markAsInitial(State state) {
initialState = (NotNaiveState) state;
}
public void markAsFinal(State state) {
finalStates.add((NotNaiveState) state);
}
public void unmarkAsFinalState(State state) {
finalStates.remove((NotNaiveState) state);
}
public List<State> allStates() {
return allStates;
}
public List<OutgoingTransition> allOutgoingTransitions(State from) {
return ((NotNaiveState) from).outgoingTransitions;
}
public State getInitialState() {
return initialState;
}
public boolean isFinal(State state) {
for (NotNaiveState someState : finalStates) {
if (someState == state) {
return true;
}
}
return false;
}
public List<OutgoingTransition> getOutReturnOutgoingTransitions(State from) {
return ((NotNaiveState) from).returnOutgoingTrasitions();
}
private LinkedList<State> allStates = new LinkedList<State>();
private NotNaiveState initialState;
private LinkedList<NotNaiveState> finalStates = new LinkedList<NotNaiveState>();
}