层次式状态嵌套可以通过从超类继承全部共同的东西,而得到新的行为,可以通过定义和现有状态的不同之处而快速定义新的状态,而不是每次从头开始创建每一个新的状态。
层次式概念图:
需要定义一个函数切换的宏,以进入不同层次的状态机:
typedef void (*SM_FUN) (int, int);
#define SUCCESS 0
#define CHANG_SM(fun) ((SM_FUN)fun, SUCCESS)
void sm_fun_level1(int state, int event)
{
switch(state)
case level1_state1:
switch(event)
case level1_state1_event1:
return CHANG_SM(sm_fun_level2);//进入其他层次的状态处理函数
case level1_state2:
......
}
void sm_fun_level2(int state, int event)
{
switch(state)
case level2_state1:
......
case level2_state2:
switch(event)
case level2_state2_event2:
return CHANG_SM(sm_fun_level1);//进入其他层次的状态处理函数
}