71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
|
#ifndef __FSM_PROTECTED_H_
|
|||
|
#define __FSM_PROTECTED_H_
|
|||
|
|
|||
|
#include "FSM_public.h"
|
|||
|
|
|||
|
#define during
|
|||
|
#define enter
|
|||
|
#define exit
|
|||
|
|
|||
|
#define transitionHandler(event) event##Handler
|
|||
|
#define actionFcn(action, state) state##_##action##Action
|
|||
|
#define index(state, event) (state*Count_Event + event)
|
|||
|
|
|||
|
typedef struct _FSMHandler FSMHandler;
|
|||
|
typedef void (*Avoid_WARNING_void_FSM)(FSM *pFSM);
|
|||
|
typedef int (*Avoid_WARNING_int_FSM)(FSM *pFSM);
|
|||
|
typedef int (*Avoid_WARNING_int_data)(void *data);
|
|||
|
typedef void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);
|
|||
|
|
|||
|
|
|||
|
typedef struct _FSM FSM;
|
|||
|
typedef struct _FSMHandler{
|
|||
|
int (**transitionTable)(FSM *pFSM);
|
|||
|
void (**enterActionTable)(FSM *pFSM);
|
|||
|
void (**duringActionTable)(FSM *pFSM);
|
|||
|
void (**exitActionTable)(FSM *pFSM);
|
|||
|
}FSMHandler;
|
|||
|
|
|||
|
|
|||
|
typedef struct _FSMPrivateVars
|
|||
|
{
|
|||
|
int curState;
|
|||
|
int defaultState; // Idle状态不能停留,必须指定一个初始状态
|
|||
|
int curEvent;
|
|||
|
int numEvent;
|
|||
|
|
|||
|
int numChild;
|
|||
|
FSM **childFSM;
|
|||
|
|
|||
|
FSMHandler fcns;
|
|||
|
}FMSPrivateVars;
|
|||
|
|
|||
|
|
|||
|
// 类似于纯虚类, vptr中的函数必须继承后重新实现
|
|||
|
typedef struct _FSM
|
|||
|
{
|
|||
|
// public functions
|
|||
|
FSMVtbl vtbl;
|
|||
|
|
|||
|
// private
|
|||
|
FMSPrivateVars privateVars;
|
|||
|
|
|||
|
// protected
|
|||
|
void *data;
|
|||
|
|
|||
|
} FSM;
|
|||
|
|
|||
|
|
|||
|
// protected, 子类能用, 外界用不了
|
|||
|
int getFSMCurState(FSM *pFSM);
|
|||
|
int getFSMCurEvent(FSM *pFSM);
|
|||
|
void constructFSM(FSM* pFSM);
|
|||
|
|
|||
|
// 继承的函数
|
|||
|
FSM *newBaseFSM(int numState, int numEvent, int defaultState);
|
|||
|
void stepBaseFSM(FSM *pFSM);
|
|||
|
void resetBaseFSM(FSM *pFSM);
|
|||
|
|
|||
|
|
|||
|
#endif
|