image/svg+xml
Initial
switch (this->states.mainState)
{
case ThirdExample_ST_Cleanup:
if(evConsumed == 0)
{
evConsumed = 1;
this->states.mainState = ThirdExample_ST_End;
}
break;
default:
break;
}
break;
}
case ThirdExample_ST_MainState:
switch (this->states.MainState)
{
case ThirdExample_ST_Last:
switch (this->states.Last)
{
case ThirdExample_ST_Last_Sub:
if(evConsumed == 0)
{
if(((msg == Cleanup)))
{
evConsumed = 1;
ThirdExample_ExitLast(this);
ThirdExample_ExitMain(this);
this->states.mainState = ThirdExample_ST_Cleanup;
}
}
if(evConsumed == 0)
{
evConsumed = 1;
incActivationCount()
ThirdExample_ExitLast(this);
this->states.MainState = ThirdExample_ST_Second;
ThirdExample_EntrySecond(this);
this->states.Second = ThirdExample_ST_Second_Sub;
ThirdExample_EntrySecondSub(this);
}
break;
default:
break;
}
break;
default:
break;
case ThirdExample_ST_End:
break;
case ThirdExample_ST_Second:
switch (this->states.Second)
{
case ThirdExample_ST_Second_Sub:
if(evConsumed == 0)
{
if(((msg == Cleanup)))
{
evConsumed = 1;
ThirdExample_ExitSecondSub(this);
ThirdExample_ExitSecond(this);
ThirdExample_ExitMain(this);
this->states.mainState = ThirdExample_ST_Cleanup;
}
}
if(evConsumed == 0)
{
evConsumed = 1;
ThirdExample_ExitSecondSub(this);
if((this->activationCount == 5))
{
ThirdExample_ExitSecond(this);
ThirdExample_ExitMain(this);
this->states.mainState = ThirdExample_ST_End;
}
if((this->activationCount != 5))
{
ThirdExample_ExitSecond(this);
this->states.MainState = ThirdExample_ST_Last;
ThirdExample_EntryLast(this);
this->states.Last = ThirdExample_ST_Last_Sub;
}
}
break;
default:
break;
}
break;
Cleanup
MainState
+
entry / entryMain
+
exit / exitMain
Second
+
entry / entrySecond
+
exit / exitSecond
Second_Sub
+
entry / entrySecondSub
+
exit / exitSecondSub
Last
+
entry / entryLast
+
exit / exitLast
Last_Sub
Initial
Final
Choice
Initial
Final
Initial
Final
End
Note the
invocations of the
different exit-
actions in the code
Cleanup
/incActivationCount()
[this->activationCount != 5]
[this->activationCount == 5]