diff --git a/vscode/FSM_OOP/baseFSM/FSM.c b/vscode/FSM_OOP/baseFSM/FSM.c index 2b9684a..0d3cc0b 100644 --- a/vscode/FSM_OOP/baseFSM/FSM.c +++ b/vscode/FSM_OOP/baseFSM/FSM.c @@ -7,6 +7,11 @@ #include "FSM_protected.h" #include "FSM_public.h" + + + + + /* -------------------------------------------------------------------------- */ /* private函数 */ /* -------------------------------------------------------------------------- */ @@ -116,7 +121,7 @@ void resetBaseFSM(FSM *pFSM) } void _stepFSM(FSM *pFSM){ - pFSM->step(pFSM); + pFSM->publicFcns.step(pFSM); } @@ -200,7 +205,7 @@ FSM* newBaseFSM(int numState, int defaultState){ FSM *pFSM = calloc(1, sizeof(FSM)); pFSM->privateVars = newFMSPrivateVars(numState, defaultState); - + FSMPureVtbl pureVtbl = { .setupHandler = NULL, .initData = NULL, @@ -211,8 +216,8 @@ FSM* newBaseFSM(int numState, int defaultState){ }; pFSM->pureVtbl = pureVtbl; - pFSM->step = stepBaseFSM; - pFSM->reset = resetBaseFSM; + pFSM->publicFcns.step = resetBaseFSM; + pFSM->publicFcns.reset = resetBaseFSM; return pFSM; } diff --git a/vscode/FSM_OOP/baseFSM/FSM_protected.h b/vscode/FSM_OOP/baseFSM/FSM_protected.h index c1eb126..5f7fd30 100644 --- a/vscode/FSM_OOP/baseFSM/FSM_protected.h +++ b/vscode/FSM_OOP/baseFSM/FSM_protected.h @@ -116,10 +116,7 @@ typedef struct FSMPureVtbl { /* -------------------------------------------------------------------------- */ typedef struct FSM { - // public functions - void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息 - void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息 - + FSMPublicFcns publicFcns; // protected FSMPureVtbl pureVtbl; diff --git a/vscode/FSM_OOP/baseFSM/FSM_public.h b/vscode/FSM_OOP/baseFSM/FSM_public.h index 7966687..1d025fe 100644 --- a/vscode/FSM_OOP/baseFSM/FSM_public.h +++ b/vscode/FSM_OOP/baseFSM/FSM_public.h @@ -17,6 +17,13 @@ typedef unsigned long Uint32; typedef struct FSM FSM; +typedef struct FSMPublicFcns +{ + void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息 + void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息 + +}FSMPublicFcns; + /* -------------------------------- 避免警告的函数定义 ------------------------------- */ #define Step(pFSM) _stepFSM((FSM *)pFSM) #define PreloaderGetReady(pFSM) _preloaderGetReady((FSM *)pFSM); diff --git a/vscode/FSM_OOP/template/templateFSM.c b/vscode/FSM_OOP/template/templateFSM.c index 0bf09cf..9cedd93 100644 --- a/vscode/FSM_OOP/template/templateFSM.c +++ b/vscode/FSM_OOP/template/templateFSM.c @@ -110,7 +110,7 @@ TemplateFSM *createTemplateFSM(){ pFSM = (TemplateFSM *)newBaseFSM(Count_State, DEFAULT_STATE); // 重新实现的函数 - pFSM->base.step = (Avoid_WARNING_Overrider_Fcns)step; + pFSM->base.publicFcns.step = (Avoid_WARNING_Overrider_Fcns)step; pFSM->base.pureVtbl.initData = (Avoid_WARNING_Overrider_Fcns)initData; pFSM->base.pureVtbl.initDataLoader = (Avoid_WARNING_Overrider_Fcns)initDataLoader; pFSM->base.pureVtbl.setupHandler = (Avoid_WARNING_void_fcns)setupHandler; diff --git a/vscode/FSM_OOP/template/templateFSM_private.h b/vscode/FSM_OOP/template/templateFSM_private.h index 66ba7f9..6222cc8 100644 --- a/vscode/FSM_OOP/template/templateFSM_private.h +++ b/vscode/FSM_OOP/template/templateFSM_private.h @@ -100,7 +100,6 @@ static void actionFcn(exit, E)() /* 转移函数 */ /* -------------------------------------------------------------------------- */ static void transitionGeneralAction(FSM pFSM){ - FSM_LOG("general"); }