package org.yakindu.scr.deephistory; public class DeepHistoryStatemachine implements IDeepHistoryStatemachine { protected class SCInterfaceImpl implements SCInterface { private boolean event1; public void raiseEvent1() { event1 = true; } private boolean event2; public void raiseEvent2() { event2 = true; } private boolean event3; public void raiseEvent3() { event3 = true; } private boolean event4; public void raiseEvent4() { event4 = true; } private boolean event5; public void raiseEvent5() { event5 = true; } private boolean event6; public void raiseEvent6() { event6 = true; } private boolean event7; public void raiseEvent7() { event7 = true; } private boolean event8; public void raiseEvent8() { event8 = true; } private boolean event9; public void raiseEvent9() { event9 = true; } protected void clearEvents() { event1 = false; event2 = false; event3 = false; event4 = false; event5 = false; event6 = false; event7 = false; event8 = false; event9 = false; } } protected SCInterfaceImpl sCInterface; private boolean initialized = false; public enum State { mainRegion_State1, mainRegion_State2, mainRegion_State2__region0_a, mainRegion_State2__region0_State4, mainRegion_State2__region0_State4__region0_State6, mainRegion_State2__region0_State4__region0_State7, mainRegion_State2__region0_State4__region0_State7__region0_State8, mainRegion_State2__region0_State4__region0_State7__region0_State9, mainRegion_State2__region0_State5, $NullState$ }; private State[] historyVector = new State[3]; private final State[] stateVector = new State[1]; private int nextStateIndex; public DeepHistoryStatemachine() { sCInterface = new SCInterfaceImpl(); } public void init() { this.initialized = true; for (int i = 0; i < 1; i++) { stateVector[i] = State.$NullState$; } for (int i = 0; i < 3; i++) { historyVector[i] = State.$NullState$; } clearEvents(); clearOutEvents(); } public void enter() { if (!initialized) { throw new IllegalStateException( "The state machine needs to be initialized first by calling the init() function."); } enterSequence_mainRegion_default(); } public void exit() { exitSequence_mainRegion(); } /** * @see IStatemachine#isActive() */ public boolean isActive() { return stateVector[0] != State.$NullState$; } /** * Always returns 'false' since this state machine can never become final. * * @see IStatemachine#isFinal() */ public boolean isFinal() { return false; } /** * This method resets the incoming events (time events included). */ protected void clearEvents() { sCInterface.clearEvents(); } /** * This method resets the outgoing events. */ protected void clearOutEvents() { } /** * Returns true if the given state is currently active otherwise false. */ public boolean isStateActive(State state) { switch (state) { case mainRegion_State1: return stateVector[0] == State.mainRegion_State1; case mainRegion_State2: return stateVector[0].ordinal() >= State. mainRegion_State2.ordinal()&& stateVector[0].ordinal() <= State.mainRegion_State2__region0_State5.ordinal(); case mainRegion_State2__region0_a: return stateVector[0] == State.mainRegion_State2__region0_a; case mainRegion_State2__region0_State4: return stateVector[0].ordinal() >= State. mainRegion_State2__region0_State4.ordinal()&& stateVector[0].ordinal() <= State.mainRegion_State2__region0_State4__region0_State7__region0_State9.ordinal(); case mainRegion_State2__region0_State4__region0_State6: return stateVector[0] == State.mainRegion_State2__region0_State4__region0_State6; case mainRegion_State2__region0_State4__region0_State7: return stateVector[0].ordinal() >= State. mainRegion_State2__region0_State4__region0_State7.ordinal()&& stateVector[0].ordinal() <= State.mainRegion_State2__region0_State4__region0_State7__region0_State9.ordinal(); case mainRegion_State2__region0_State4__region0_State7__region0_State8: return stateVector[0] == State.mainRegion_State2__region0_State4__region0_State7__region0_State8; case mainRegion_State2__region0_State4__region0_State7__region0_State9: return stateVector[0] == State.mainRegion_State2__region0_State4__region0_State7__region0_State9; case mainRegion_State2__region0_State5: return stateVector[0] == State.mainRegion_State2__region0_State5; default: return false; } } public SCInterface getSCInterface() { return sCInterface; } public void raiseEvent1() { sCInterface.raiseEvent1(); } public void raiseEvent2() { sCInterface.raiseEvent2(); } public void raiseEvent3() { sCInterface.raiseEvent3(); } public void raiseEvent4() { sCInterface.raiseEvent4(); } public void raiseEvent5() { sCInterface.raiseEvent5(); } public void raiseEvent6() { sCInterface.raiseEvent6(); } public void raiseEvent7() { sCInterface.raiseEvent7(); } public void raiseEvent8() { sCInterface.raiseEvent8(); } public void raiseEvent9() { sCInterface.raiseEvent9(); } private boolean check_mainRegion_State1_tr0_tr0() { return sCInterface.event1; } private boolean check_mainRegion_State2_tr0_tr0() { return sCInterface.event2; } private boolean check_mainRegion_State2__region0_a_tr0_tr0() { return sCInterface.event3; } private boolean check_mainRegion_State2__region0_State4_tr0_tr0() { return sCInterface.event4; } private boolean check_mainRegion_State2__region0_State4__region0_State6_tr0_tr0() { return sCInterface.event5; } private boolean check_mainRegion_State2__region0_State4__region0_State7_tr0_tr0() { return sCInterface.event6; } private boolean check_mainRegion_State2__region0_State4__region0_State7__region0_State8_tr0_tr0() { return sCInterface.event7; } private boolean check_mainRegion_State2__region0_State4__region0_State7__region0_State9_tr0_tr0() { return sCInterface.event8; } private void effect_mainRegion_State1_tr0() { exitSequence_mainRegion_State1(); enterSequence_mainRegion_State2_default(); } private void effect_mainRegion_State2_tr0() { exitSequence_mainRegion_State2(); enterSequence_mainRegion_State1_default(); } private void effect_mainRegion_State2__region0_a_tr0() { exitSequence_mainRegion_State2__region0_a(); enterSequence_mainRegion_State2__region0_State4_default(); } private void effect_mainRegion_State2__region0_State4_tr0() { exitSequence_mainRegion_State2__region0_State4(); enterSequence_mainRegion_State2__region0_State5_default(); } private void effect_mainRegion_State2__region0_State4__region0_State6_tr0() { exitSequence_mainRegion_State2__region0_State4__region0_State6(); enterSequence_mainRegion_State2__region0_State4__region0_State7_default(); } private void effect_mainRegion_State2__region0_State4__region0_State7_tr0() { exitSequence_mainRegion_State2__region0_State4__region0_State7(); enterSequence_mainRegion_State2__region0_State4__region0_State6_default(); } private void effect_mainRegion_State2__region0_State4__region0_State7__region0_State8_tr0() { exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8(); enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9_default(); } private void effect_mainRegion_State2__region0_State4__region0_State7__region0_State9_tr0() { exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9(); enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8_default(); } /* 'default' enter sequence for state State1 */ private void enterSequence_mainRegion_State1_default() { nextStateIndex = 0; stateVector[0] = State.mainRegion_State1; } /* 'default' enter sequence for state State2 */ private void enterSequence_mainRegion_State2_default() { enterSequence_mainRegion_State2__region0_default(); } /* 'default' enter sequence for state a */ private void enterSequence_mainRegion_State2__region0_a_default() { nextStateIndex = 0; stateVector[0] = State.mainRegion_State2__region0_a; historyVector[0] = stateVector[0]; } /* 'default' enter sequence for state State4 */ private void enterSequence_mainRegion_State2__region0_State4_default() { enterSequence_mainRegion_State2__region0_State4__region0_default(); historyVector[0] = stateVector[0]; } /* 'default' enter sequence for state State6 */ private void enterSequence_mainRegion_State2__region0_State4__region0_State6_default() { nextStateIndex = 0; stateVector[0] = State.mainRegion_State2__region0_State4__region0_State6; historyVector[1] = stateVector[0]; } /* 'default' enter sequence for state State7 */ private void enterSequence_mainRegion_State2__region0_State4__region0_State7_default() { enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_default(); historyVector[1] = stateVector[0]; } /* 'default' enter sequence for state State8 */ private void enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8_default() { nextStateIndex = 0; stateVector[0] = State.mainRegion_State2__region0_State4__region0_State7__region0_State8; historyVector[2] = stateVector[0]; } /* 'default' enter sequence for state State9 */ private void enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9_default() { nextStateIndex = 0; stateVector[0] = State.mainRegion_State2__region0_State4__region0_State7__region0_State9; historyVector[2] = stateVector[0]; } /* 'default' enter sequence for state State5 */ private void enterSequence_mainRegion_State2__region0_State5_default() { nextStateIndex = 0; stateVector[0] = State.mainRegion_State2__region0_State5; historyVector[0] = stateVector[0]; } /* 'default' enter sequence for region mainRegion */ private void enterSequence_mainRegion_default() { react_mainRegion__entry_Default(); } /* 'default' enter sequence for region null */ private void enterSequence_mainRegion_State2__region0_default() { react_mainRegion_State2__region0__entry_Default(); } /* deep enterSequence with history in child null */ private void deepEnterSequence_mainRegion_State2__region0() { switch (historyVector[0]) { case mainRegion_State2__region0_a: enterSequence_mainRegion_State2__region0_a_default(); break; case mainRegion_State2__region0_State4__region0_State6: deepEnterSequence_mainRegion_State2__region0_State4__region0(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State8: deepEnterSequence_mainRegion_State2__region0_State4__region0(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: deepEnterSequence_mainRegion_State2__region0_State4__region0(); break; case mainRegion_State2__region0_State5: enterSequence_mainRegion_State2__region0_State5_default(); break; default: break; } } /* 'default' enter sequence for region null */ private void enterSequence_mainRegion_State2__region0_State4__region0_default() { react_mainRegion_State2__region0_State4__region0__entry_Default(); } /* deep enterSequence with history in child null */ private void deepEnterSequence_mainRegion_State2__region0_State4__region0() { switch (historyVector[1]) { case mainRegion_State2__region0_State4__region0_State6: enterSequence_mainRegion_State2__region0_State4__region0_State6_default(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State8: deepEnterSequence_mainRegion_State2__region0_State4__region0_State7__region0(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: deepEnterSequence_mainRegion_State2__region0_State4__region0_State7__region0(); break; default: break; } } /* 'default' enter sequence for region null */ private void enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_default() { react_mainRegion_State2__region0_State4__region0_State7__region0__entry_Default(); } /* deep enterSequence with history in child null */ private void deepEnterSequence_mainRegion_State2__region0_State4__region0_State7__region0() { switch (historyVector[2]) { case mainRegion_State2__region0_State4__region0_State7__region0_State8: enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8_default(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9_default(); break; default: break; } } /* Default exit sequence for state State1 */ private void exitSequence_mainRegion_State1() { nextStateIndex = 0; stateVector[0] = State.$NullState$; } /* Default exit sequence for state State2 */ private void exitSequence_mainRegion_State2() { exitSequence_mainRegion_State2__region0(); } /* Default exit sequence for state a */ private void exitSequence_mainRegion_State2__region0_a() { nextStateIndex = 0; stateVector[0] = State.$NullState$; } /* Default exit sequence for state State4 */ private void exitSequence_mainRegion_State2__region0_State4() { exitSequence_mainRegion_State2__region0_State4__region0(); } /* Default exit sequence for state State6 */ private void exitSequence_mainRegion_State2__region0_State4__region0_State6() { nextStateIndex = 0; stateVector[0] = State.$NullState$; } /* Default exit sequence for state State7 */ private void exitSequence_mainRegion_State2__region0_State4__region0_State7() { exitSequence_mainRegion_State2__region0_State4__region0_State7__region0(); } /* Default exit sequence for state State8 */ private void exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8() { nextStateIndex = 0; stateVector[0] = State.$NullState$; } /* Default exit sequence for state State9 */ private void exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9() { nextStateIndex = 0; stateVector[0] = State.$NullState$; } /* Default exit sequence for state State5 */ private void exitSequence_mainRegion_State2__region0_State5() { nextStateIndex = 0; stateVector[0] = State.$NullState$; } /* Default exit sequence for region mainRegion */ private void exitSequence_mainRegion() { switch (stateVector[0]) { case mainRegion_State1: exitSequence_mainRegion_State1(); break; case mainRegion_State2__region0_a: exitSequence_mainRegion_State2__region0_a(); break; case mainRegion_State2__region0_State4__region0_State6: exitSequence_mainRegion_State2__region0_State4__region0_State6(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State8: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9(); break; case mainRegion_State2__region0_State5: exitSequence_mainRegion_State2__region0_State5(); break; default: break; } } /* Default exit sequence for region null */ private void exitSequence_mainRegion_State2__region0() { switch (stateVector[0]) { case mainRegion_State2__region0_a: exitSequence_mainRegion_State2__region0_a(); break; case mainRegion_State2__region0_State4__region0_State6: exitSequence_mainRegion_State2__region0_State4__region0_State6(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State8: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9(); break; case mainRegion_State2__region0_State5: exitSequence_mainRegion_State2__region0_State5(); break; default: break; } } /* Default exit sequence for region null */ private void exitSequence_mainRegion_State2__region0_State4__region0() { switch (stateVector[0]) { case mainRegion_State2__region0_State4__region0_State6: exitSequence_mainRegion_State2__region0_State4__region0_State6(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State8: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9(); break; default: break; } } /* Default exit sequence for region null */ private void exitSequence_mainRegion_State2__region0_State4__region0_State7__region0() { switch (stateVector[0]) { case mainRegion_State2__region0_State4__region0_State7__region0_State8: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: exitSequence_mainRegion_State2__region0_State4__region0_State7__region0_State9(); break; default: break; } } /* The reactions of state State1. */ private void react_mainRegion_State1() { if (check_mainRegion_State1_tr0_tr0()) { effect_mainRegion_State1_tr0(); } } /* The reactions of state a. */ private void react_mainRegion_State2__region0_a() { if (check_mainRegion_State2_tr0_tr0()) { effect_mainRegion_State2_tr0(); } else { if (check_mainRegion_State2__region0_a_tr0_tr0()) { effect_mainRegion_State2__region0_a_tr0(); } } } /* The reactions of state State6. */ private void react_mainRegion_State2__region0_State4__region0_State6() { if (check_mainRegion_State2_tr0_tr0()) { effect_mainRegion_State2_tr0(); } else { if (check_mainRegion_State2__region0_State4_tr0_tr0()) { effect_mainRegion_State2__region0_State4_tr0(); } else { if (check_mainRegion_State2__region0_State4__region0_State6_tr0_tr0()) { effect_mainRegion_State2__region0_State4__region0_State6_tr0(); } } } } /* The reactions of state State8. */ private void react_mainRegion_State2__region0_State4__region0_State7__region0_State8() { if (check_mainRegion_State2_tr0_tr0()) { effect_mainRegion_State2_tr0(); } else { if (check_mainRegion_State2__region0_State4_tr0_tr0()) { effect_mainRegion_State2__region0_State4_tr0(); } else { if (check_mainRegion_State2__region0_State4__region0_State7_tr0_tr0()) { effect_mainRegion_State2__region0_State4__region0_State7_tr0(); } else { if (check_mainRegion_State2__region0_State4__region0_State7__region0_State8_tr0_tr0()) { effect_mainRegion_State2__region0_State4__region0_State7__region0_State8_tr0(); } } } } } /* The reactions of state State9. */ private void react_mainRegion_State2__region0_State4__region0_State7__region0_State9() { if (check_mainRegion_State2_tr0_tr0()) { effect_mainRegion_State2_tr0(); } else { if (check_mainRegion_State2__region0_State4_tr0_tr0()) { effect_mainRegion_State2__region0_State4_tr0(); } else { if (check_mainRegion_State2__region0_State4__region0_State7_tr0_tr0()) { effect_mainRegion_State2__region0_State4__region0_State7_tr0(); } else { if (check_mainRegion_State2__region0_State4__region0_State7__region0_State9_tr0_tr0()) { effect_mainRegion_State2__region0_State4__region0_State7__region0_State9_tr0(); } } } } } /* The reactions of state State5. */ private void react_mainRegion_State2__region0_State5() { if (check_mainRegion_State2_tr0_tr0()) { effect_mainRegion_State2_tr0(); } else { } } /* Default react sequence for initial entry */ private void react_mainRegion__entry_Default() { enterSequence_mainRegion_State1_default(); } /* Default react sequence for initial entry */ private void react_mainRegion_State2__region0_State4__region0__entry_Default() { enterSequence_mainRegion_State2__region0_State4__region0_State6_default(); } /* Default react sequence for initial entry */ private void react_mainRegion_State2__region0_State4__region0_State7__region0__entry_Default() { enterSequence_mainRegion_State2__region0_State4__region0_State7__region0_State8_default(); } /* Default react sequence for deep history entry */ private void react_mainRegion_State2__region0__entry_Default() { /* Enter the region with deep history */ if (historyVector[0] != State.$NullState$) { deepEnterSequence_mainRegion_State2__region0(); } else { enterSequence_mainRegion_State2__region0_a_default(); } } public void runCycle() { if (!initialized) throw new IllegalStateException( "The state machine needs to be initialized first by calling the init() function."); clearOutEvents(); for (nextStateIndex = 0; nextStateIndex < stateVector.length; nextStateIndex++) { switch (stateVector[nextStateIndex]) { case mainRegion_State1: react_mainRegion_State1(); break; case mainRegion_State2__region0_a: react_mainRegion_State2__region0_a(); break; case mainRegion_State2__region0_State4__region0_State6: react_mainRegion_State2__region0_State4__region0_State6(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State8: react_mainRegion_State2__region0_State4__region0_State7__region0_State8(); break; case mainRegion_State2__region0_State4__region0_State7__region0_State9: react_mainRegion_State2__region0_State4__region0_State7__region0_State9(); break; case mainRegion_State2__region0_State5: react_mainRegion_State2__region0_State5(); break; default: // $NullState$ } } clearEvents(); } }