private TransitionGraph<Role> mirror(final TransitionGraph<Role> tg) { final Map<State<Role>, State<Role>> newStates = new HashMap<>(); final TransitionGraph<Role> mirror = new TransitionGraph<>(); final State<Role> oldInitialState = tg.getInitialState(); final State<Role> newFinalState = copyState(oldInitialState, mirror, newStates); mirror.addFinalState(newFinalState); final Set<State<Role>> oldFinalStates = tg.getFinalStates(); State<Role> newInitialState = null; if (oldFinalStates.size() == 1) { final State<Role> oldFinalState = oldFinalStates.iterator().next(); newInitialState = newStates.get(oldFinalState); } else { newInitialState = mirror.newState(); for (final State<Role> oldFinalState : oldFinalStates) mirror.addTransition(newInitialState, newStates.get(oldFinalState)); } mirror.setInitialState(newInitialState); return mirror; }
private State<Role> copyState(final State<Role> oldState, final TransitionGraph<Role> newTG, final Map<State<Role>, State<Role>> newStates) { State<Role> newState = newStates.get(oldState); if (newState == null) { newState = newTG.newState(); newStates.put(oldState, newState); for (final Transition<Role> t : oldState.getTransitions()) { final State<Role> oldTo = t.getTo(); final State<Role> newFrom = copyState(oldTo, newTG, newStates); if (t.isEpsilon()) newTG.addTransition(newFrom, newState); else newTG.addTransition(newFrom, t.getName().getInverse(), newState); } } return newState; } }
private State<Role> copyState(final State<Role> oldState, final TransitionGraph<Role> newTG, final Map<State<Role>, State<Role>> newStates) { State<Role> newState = newStates.get(oldState); if (newState == null) { newState = newTG.newState(); newStates.put(oldState, newState); for (final Transition<Role> t : oldState.getTransitions()) { final State<Role> oldTo = t.getTo(); final State<Role> newFrom = copyState(oldTo, newTG, newStates); if (t.isEpsilon()) newTG.addTransition(newFrom, newState); else newTG.addTransition(newFrom, t.getName().getInverse(), newState); } } return newState; } }
private TransitionGraph<Role> mirror(final TransitionGraph<Role> tg) { final Map<State<Role>, State<Role>> newStates = new HashMap<>(); final TransitionGraph<Role> mirror = new TransitionGraph<>(); final State<Role> oldInitialState = tg.getInitialState(); final State<Role> newFinalState = copyState(oldInitialState, mirror, newStates); mirror.addFinalState(newFinalState); final Set<State<Role>> oldFinalStates = tg.getFinalStates(); State<Role> newInitialState = null; if (oldFinalStates.size() == 1) { final State<Role> oldFinalState = oldFinalStates.iterator().next(); newInitialState = newStates.get(oldFinalState); } else { newInitialState = mirror.newState(); for (final State<Role> oldFinalState : oldFinalStates) mirror.addTransition(newInitialState, newStates.get(oldFinalState)); } mirror.setInitialState(newInitialState); return mirror; }
private void addRoleChainTransition(final TransitionGraph<Role> tg, final State<Role> initialState, final State<Role> finalState, final ATermList list, final int length) { State<Role> prev = initialState; ATermList chain = list; for (int i = 0; i < length; i++, chain = chain.getNext()) { final Role role = _rbox.getRole(chain.getFirst()); final State<Role> next = i == length - 1 ? finalState : tg.newState(); tg.addTransition(prev, role, next); prev = next; } }
private void addRoleChainTransition(final TransitionGraph<Role> tg, final State<Role> initialState, final State<Role> finalState, final ATermList list, final int length) { State<Role> prev = initialState; ATermList chain = list; for (int i = 0; i < length; i++, chain = chain.getNext()) { final Role role = _rbox.getRole(chain.getFirst()); final State<Role> next = i == length - 1 ? finalState : tg.newState(); tg.addTransition(prev, role, next); prev = next; } }
tg.addFinalState(f); tg.addTransition(i, s, f); tg.addTransition(i, sub, f);
tg.addFinalState(f); tg.addTransition(i, s, f); tg.addTransition(i, sub, f);